Arc*_*Arc 8 ruby migration ruby-on-rails
如果你有多态的belongs_to关联,那么引用将添加所需的两个列:
create_table :products do |t|
t.references :attachment, :polymorphic => {:default => 'Photo'}
end
Run Code Online (Sandbox Code Playgroud)
将添加一个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
Run Code Online (Sandbox Code Playgroud)
如你看到的.它将[col] _id和[col] _type列添加到表中.
这跟说:
create_table :products do |t|
t.integer :attachment_id
t.string :attachment_type, :default => 'Photo'
end
Run Code Online (Sandbox Code Playgroud)
多态关联用于将一种对象连接到多种其他对象.
一个很好的例子可能是支持标签的应用程序,其中标签可以连接到Products和Categories.
在您的示例中,看起来像Products可以附加到多种对象,其中默认类型的对象是Photo.(attachment_type将是"照片",并且attachment_id将是"照片"表中一行的ID)
基本上,根据定义,多态关联增加了与许多其他 Rails ActiveRecord 模型创建关联的能力。
这两列都是为了让Rails知道关联所指的是哪个模型,你有attachment_type列(即字符串)(默认值为“Photo”,表名:数据库中的照片),attachment_id有点像该特定模型/表(即照片)的外键。
通常,这可以让您灵活地将一个模型与许多其他模型关联起来。
| 归档时间: |
|
| 查看次数: |
3833 次 |
| 最近记录: |