ruby on rails - migrations - ¿Cómo agrego la migración con varias referencias al mismo modelo en una tabla? Ruby/Rails
remove migration rails (1)
Puede hacer esto simplemente con el método add_column
en sus migraciones y configurar las asociaciones adecuadas en sus clases:
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
Esta publicación del blog, Creando múltiples asociaciones con la misma tabla , entra en más detalles.
¿Cómo creo una migración con dos campos que hacen referencia a la misma tabla? Tengo tablas A, e imagen. A.image1_id hará referencia a la imagen, y A.image2_id también hará referencia a la imagen. Solo hay 2 imágenes, no muchas. Si yo uso
class AddFields < ActiveRecord::Migration
def change
change_table(:ticket) do |t|
t.references :image1_id
t.references :image2_id
end
end
end
No creo que vaya a funcionar porque agregará otro _id al final y probablemente no sabrá usar el modelo de "imagen". También pensé en
change_table(:ticket) do |t|
t.references :image
Pero entonces, ¿cómo agrego dos de esos? También pensé en añadir
create_table :images do |t|
t.belongs_to :ticket
t.string :file
Pero solo quiero 2, no muchos, y esto no parece permitir llegar a la imagen desde el ticket, como ticket.image1
o ticket.image2
.
De acuerdo con esta documentación http://apidock.com/rails/v3.2.8/ActiveRecord/ConnectionAdapters/SchemaStatements/change_table que es todo lo que pude encontrar, t.references tampoco parece tener ningún argumento.
change_table(:suppliers) do |t|
t.references :company
end