Как добавить миграцию с несколькими ссылками на одну и ту же модель в одной таблице? Рубин/Рельсы
Как создать миграцию с двумя полями, которые ссылаются на одну и ту же таблицу? У меня есть таблицы 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.image1
или ticket.image2
.
В соответствии с этой документацией http://apidock.com/rails/v3.2.8/ActiveRecord/ConnectionAdapters/SchemaStatements/change_table, который я могу найти, t.references также не принимает никаких аргументов.
change_table(:suppliers) do |t|
t.references :company
end
Ответы
Ответ 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
Это сообщение в блоге Создание нескольких ассоциаций с той же таблицей, более подробно.