在Rails中编写多态迁移有两种方法。一般来说,我已经这样做了:
class CreateFeatures < ActiveRecord::Migration
def change
create_table :features do |t|
t.integer :featureable_id
t.string :featurable_type
t.timestamps
end
end
end
但是,我们也可以这样做:
class CreateFeatures < ActiveRecord::Migration
def change
create_table :features do |t|
t.references :featureable, :polymorphic => true
t.timestamps
end
end
end
出于所有实际目的,这两者是相同的。我的问题:一个比另一个好吗?是否有更好的未来可维护性?
只有当两件事中的一件发生变化时,这可能是一个问题:
只是想知道是否存在偏好,或者它是否真的无关紧要&#34;
答案 0 :(得分:0)
对于通过迁移生成所有表的所有rails应用程序,功能上没有区别。
以下是参考代码:
def references(*args)
options = args.extract_options!
polymorphic = options.delete(:polymorphic)
args.each do |col|
@base.add_column(@table_name, "#{col}_id", :integer, options)
@base.add_column(@table_name, "#{col}_type", :string, polymorphic.is_a?(Hash) ? polymorphic : options) unless polymorphic.nil?
end
end
这一切都很好但是如果引用表上的外键不是_id,则方法一是唯一的选择。
引用只会为您节省一行代码......