当前位置:  开发笔记 > 编程语言 > 正文

多态关联

如何解决《多态关联》经验,为你挑选了1个好方法。

如果你有多态的belongs_to关联,那么引用将添加所需的两个列:

create_table :products do |t|
  t.references :attachment, :polymorphic => {:default => 'Photo'}
end

将添加一个attachment_id列和一个字符串attachment_type列,其默认值为"Photo".

这到底是什么意思?



1> Gdeglin..:

以下是引用方法的文档: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

多态关联用于将一种对象连接到多种其他对象.

一个很好的例子可能是支持标签的应用程序,其中标签可以连接到ProductsCategories.

在您的示例中,看起来像Products可以附加到多种对象,其中默认类型的对象是Photo.(attachment_type将是"照片",并且attachment_id将是"照片"表中一行的ID)

推荐阅读
echo7111436
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有