как создать миграцию, чтобы сделать ссылки полиморфными


у меня есть таблица продуктов и хочу добавить столбец:

t.references :imageable, :polymorphic => true

Я пытался создать миграцию для этого делать:

$ rails generate migration AddImageableToProducts imageable:references:polymorphic

но я, очевидно, делаю это неправильно. Кто-нибудь может сделать какое-нибудь предложение? Спасибо

когда я пытаюсь вручную поместить его после создания миграции, я сделал это так:

class AddImageableToProducts < ActiveRecord::Migration
  def self.up
    add_column :products, :imageable, :references, :polymorphic => true
  end

  def self.down
    remove_column :products, :imageable
  end
end

и он до сих пор не работал

4 101

4 ответа:

насколько я знаю, нет встроенного генератора для полиморфных ассоциаций. Создайте пустую миграцию, а затем измените ее вручную в соответствии с вашими потребностями.

обновление: Вам нужно будет указать, какую таблицу вы меняете. Согласно это так ответ:

class AddImageableToProducts < ActiveRecord::Migration
  def up
    change_table :products do |t|
      t.references :imageable, polymorphic: true
    end
  end

  def down
    change_table :products do |t|
      t.remove_references :imageable, polymorphic: true
    end
  end
end

то, что вы пытаетесь сделать, еще не реализовано в стабильной версии rails, поэтому ответ Брэндона является правильным на данный момент. Но эта функция будет реализована в rails 4 и уже доступна в версии edge следующим образом (согласно этому журнал изменений):

$ rails generate migration AddImageableToProducts imageable:references{polymorphic}

вы также можете сделать следующее:

class AddImageableToProducts < ActiveRecord::Migration
  def change
    add_reference :products, :imageable, polymorphic: true, index: true
  end
end

вы можете попробовать rails generate migration AddImageableToProducts imageable:references{polymorphic}