remove rails migrations foreign column ruby-on-rails ruby rails-activerecord rails-migrations

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