如何产生迁移,使引用多态

我有一个 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

但还是没用

80979 次浏览

在 Rails 4之前,没有用于多态关联的内置生成器。如果您正在使用 Rails 的早期版本,请生成一个空白迁移,然后根据您的需要手动修改它。

更新 : 您需要指定要更改的表。根据 这么回答:

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

您正在尝试做的事情还没有在轨道的稳定版本中实现,所以 Michelle 的答案是正确的。但是这个特性将在 Rails4中实现,并且已经可以在 edge 版本中使用,如下所示(根据 彻底改变) :

$ rails generate migration AddImageableToProducts imageable:references{polymorphic}

有些 shell 可能需要使用 \转义 {polymorphic}:

$ rails generate migration AddImageableToProducts imageable:references\{polymorphic\}

你也可以这样做:

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

你可以试试 rails generate migration AddImageableToProducts imageable:references{polymorphic}