如果你有多态的belongs_to关联,那么引用将添加所需的两个列:
create_table :products do |t| t.references :attachment, :polymorphic => {:default => 'Photo'} end
将添加一个attachment_id
列和一个字符串attachment_type
列,其默认值为"Photo".
这到底是什么意思?
以下是引用方法的文档:http: //api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/TableDefinition.html#M001938
引用方法的代码如下:
497: def references(*args) 498: options = args.extract_options! 499: polymorphic = options.delete(:polymorphic) 500: args.each do |col| 501: column("#{col}_id", :integer, options) 502: column("#{col}_type", :string, polymorphic.is_a?(Hash) ? polymorphic : options) unless polymorphic.nil? 503: end 504: end
如你看到的.它将[col] _id和[col] _type列添加到表中.
这跟说:
create_table :products do |t| t.integer :attachment_id t.string :attachment_type, :default => 'Photo' end
多态关联用于将一种对象连接到多种其他对象.
一个很好的例子可能是支持标签的应用程序,其中标签可以连接到Products
和Categories
.
在您的示例中,看起来像Products可以附加到多种对象,其中默认类型的对象是Photo.(attachment_type
将是"照片",并且attachment_id
将是"照片"表中一行的ID)