Search code examples
ruby-on-railspolymorphic-associationsrails-migrations

how to generate migration to make references polymorphic


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 AddImageableToProducts 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


Solution

  • 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)