在Rails 3.1中,文档说
" 4.2.2.13:source_type
:source_type选项指定has_one:through关联的源关联类型,该关联通过多态关联进行。 "
我刚刚阅读:source解释,但仍然没有得到什么source_type用于?
答案 0 :(得分:59)
:source_type
处理多态的关联。也就是说,如果你有这样的关系:
class Tag < ActiveRecord::Base
has_many :taggings, :dependent => :destroy
has_many :books, :through => :taggings, :source => :taggable, :source_type => "Book"
has_many :movies, :through => :taggings, :source => :taggable, :source_type => "Movie"
end
class Tagging < ActiveRecord::Base
belongs_to :taggable, :polymorphic => true
belongs_to :tag
end
class Book < ActiveRecord::Base
has_many :taggings, :as => :taggable
has_many :tags, :through => :taggings
end
class Movie < ActiveRecord::Base
has_many :taggings, :as => :taggable
has_many :tags, :through => :taggings
end
然后源类型允许您进行如下查询:
“找到所有标有”Fun“标签的书籍
tag = tag.find_by_name('Fun')
tag.books
如果没有源类型,您将无法执行此操作,您只能获得标记为“Fun”的对象集合。如果你只是特定的源代码,它就不知道对象是哪种类,所以你不知道数据库中的哪个表可以从中拉出来。 source_type
通知您要尝试检索的对象类型。
这是从这篇博文中摘录的:http://www.brentmc79.com/posts/polymorphic-many-to-many-associations-in-rails
希望它有所帮助。
答案 1 :(得分:0)
☝此消息与上面的帖子有关 (我没有足够的声誉,因此无法将此添加为评论...)
感谢@TheDelChop的简单而完美的用例。我只是建议使用描述用户故事的简单架构来完成您的完美解释。以防万一。 谢谢 !