как сгенерировать миграцию, чтобы сделать ссылки полиморфными - PullRequest
112 голосов
/ 04 апреля 2011

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

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 ]

252 голосов
/ 04 марта 2013

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

$ rails generate migration AddImageableToProducts imageable:references{polymorphic}
102 голосов
/ 04 апреля 2011

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

Обновление : Вам нужно будет указать, какую таблицу вы меняете. Согласно этому 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
31 голосов
/ 25 ноября 2014

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

class AddImageableToProducts < ActiveRecord::Migration
  def change
    add_reference :products, :imageable, polymorphic: true, index: true
  end
end
16 голосов
/ 13 сентября 2017

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

...