如果你有多态的belongs_to关联,那么引用将添加两个所需的列:
create_table :products do |t|
t.references :attachment, :polymorphic => {:default => 'Photo'}
end
将添加attachment_id
列和字符串attachment_type
列,其默认值为“Photo”。
这究竟是什么意思?
答案 0 :(得分:6)
以下是有关引用方法的文档: 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
。
在您的示例中,看起来产品可以附加到多种对象,其中默认类型的对象是Photo。 (attachment_type
将是“照片”,而attachment_id
将是“照片”表格中某行的ID)
答案 1 :(得分:4)
基本上,定义的多态关联增加了与许多其他Rails ActiveRecord模型建立关联的能力。
两个列都可以让Rails知道关联所指的模型,你有attachment_type列(即字符串)(默认值是“Photo”,表名:db中的照片), 并且attachment_id有点像特定模型/表的外键(即照片)。
通常,您可以灵活地将一个模型与其他模型相关联。
答案 2 :(得分:0)
多态意味着它可以属于不同的对象(或不同表中的不同记录)。它确定的方式基于type和id字段。如果你的关联不是多态的,它只会有一个_id字段。