如何与多个引用在一个表中添加迁移到相同型号? 的Ruby / Rails(How do I ad

2019-07-19 21:08发布

如何创建指向同一表的两个领域迁移? 我有表A,和图像。 A.image1_id将基准图像,并且A.image2_id将引用图像也。 只有2图像,不是很多。 如果我使用

class AddFields < ActiveRecord::Migration
   def change
    change_table(:ticket) do |t|
        t.references :image1_id
        t.references :image2_id
    end
  end
end

我不认为这会工作,因为它会增加另一个_id至年底,并可能不知道要使用“图像”模式。 我也想过

change_table(:ticket) do |t|
    t.references :image

但后来我怎么添加两个那些? 我也想过加入

create_table :images do |t|
  t.belongs_to :ticket
  t.string :file

但我只想要2的并不多,而这似乎并没有允许从车票的的形象,像ticket.image1ticket.image2

根据这一文件http://apidock.com/rails/v3.2.8/ActiveRecord/ConnectionAdapters/SchemaStatements/change_table这是所有我能找到的,t.references似乎没有带任何参数无论是。

change_table(:suppliers) do |t|
  t.references :company
end

Answer 1:

为此,您可以简单地用add_column在迁移过程的方法,并建立了类中的适当的关联:

class AddFields < ActiveRecord::Migration
  def change
    add_column :tickets, :image_1_id, :integer
    add_column :tickets, :image_2_id, :integer
  end
end

class Ticket < ActiveRecord::Base
  belongs_to :image_1, :class_name => "Image"
  belongs_to :image_2, :class_name => "Image"
end

class Image < ActiveRecord::Base
  has_many :primary_tickets, :class_name => "Ticket", :foreign_key => "image_1_id"
  has_many :secondary_tickets, :class_name => "Ticket", :foreign_key => "image_2_id"
end

本博客文章, 创建多个关联与相同的表 ,进入更多细节。



文章来源: How do I add migration with multiple references to the same model in one table? Ruby/Rails