web-dev-qa-db-ja.com

参照を多態的にするために移行を生成する方法

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

それはまだ機能していません

113
railslearner

私の知る限り、ポリモーフィックな関連付けのための組み込みジェネレータはありません。空の移行を生成し、必要に応じて手動で変更します。

Update:変更するテーブルを指定する必要があります。 this SO answer

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
105
Michelle Tilley

あなたがしようとしていることは、安定版のRailsにまだ実装されていないため、今のところBrandonの答えは正しいものです。ただし、この機能はRails 4で実装され、次のようにEdgeバージョンで既に利用可能です(これに応じて [〜#〜] changelog [〜#〜] ):

$ Rails generate migration AddImageableToProducts imageable:references{polymorphic}
252
simon-olivier

次のこともできます。

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

あなたが試すことができます Rails generate migration AddImageableToProducts imageable:references{polymorphic}

16
hutusi