I have a Products table and want to add a column:
t.references :imageable, :polymorphic => true
I was trying to generate migration for this by doing:
$ rails generate migration AddImageable开发者_开发问答ToProducts imageable:references:polymorphic
but I am obviously doing it wrong. Can anybody make any suggestion? Thanks
When I try to manually put it in after generating the migration, I did it like this:
class AddImageableToProducts < ActiveRecord::Migration
def self.up
add_column :products, :imageable, :references, :polymorphic => true
end
def self.down
remove_column :products, :imageable
end
end
and it still hasn't worked
What you are trying to do is not yet implemented in the stable version of rails so Michelle's answer is the right one for now. But this feature will be implemented in rails 4 and is already available in the edge version as follows (according to this CHANGELOG):
$ rails generate migration AddImageableToProducts imageable:references{polymorphic}
Some shells may need {polymorphic}
escaped with a \
:
$ rails generate migration AddImageableToProducts imageable:references\{polymorphic\}
Before Rails 4 there was no built-in generator for polymorphic associations. If you are using an early version of Rails generate a blank migration and then modify it by hand according to your needs.
Update: You'll need to specify which table you're changing. According to 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
Rails 4 added a generator for polymorphic associations (see simon-olivier answer)
You could also do the following:
class AddImageableToProducts < ActiveRecord::Migration
def change
add_reference :products, :imageable, polymorphic: true, index: true
end
end
You can try rails generate migration AddImageableToProducts imageable:references{polymorphic}
精彩评论