Подтвердить что ты не робот

Как добавить миграцию с несколькими ссылками на одну и ту же модель в одной таблице? Рубин/Рельсы

Как создать миграцию с двумя полями, которые ссылаются на одну и ту же таблицу? У меня есть таблицы 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
4b9b3361

Ответ 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

Это сообщение в блоге Создание нескольких ассоциаций с той же таблицей, более подробно.