1. ホーム
  2. ruby-on-rails

[解決済み] 参照を多相化するためのマイグレーションを生成する方法

2022-05-25 04:33:51

質問

商品テーブルがあり、カラムを追加したい。

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

で、まだうまくいっていません。

どうすればよいのでしょうか?

Rails 4以前には、ポリモーフィックな関連付けのための組み込みジェネレータがありませんでした。Railsの初期バージョンを使っている場合は、空のマイグレーションを生成してから、必要に応じて手作業で修正してください。

更新 : どのテーブルを変更するのかを指定する必要があります。によると この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

Rails 4ではポリモーフィックなアソシエーションのためのジェネレータが追加されました(simon-olivierの回答参照)。