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

У меня есть таблица Products и вы хотите добавить столбец:

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

и он все еще не работал

Ответ 1

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

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

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

Ответ 2

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

$ rails generate migration AddImageableToProducts imageable:references{polymorphic}

Ответ 3

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

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

Ответ 4

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