假设我有一个带有“收藏夹”功能的应用程序,用户可以在其收藏夹列表中添加文档,备注或评论。
在我的脑海里......
has_many
收藏夹belongs_to
用户belongs_to
收藏belongs_to
收藏belongs_to
收藏这种类型的关联有什么问题?多态关联会有什么帮助?
答案 0 :(得分:1)
因为那么你最喜欢的实例将不知道它最喜欢什么:)
它知道它has_one :note
,还有__ :comment
,还是?但不是两个肯定。
多态关联相反的方式有帮助,因为它会表示一个Favorite
对象belongs_to :favorited
对象是多态的,它可以是任何类,其名称将是存储在:favorited_type
字符串数据库列中,因此您最喜欢的对象将知道它有利于注释或文档或注释。
带一些代码
class Note
has_many :favorites, :as => :favorited
has_many :fans, :through => :favorites, :source => :user
end
class Discussion
has_many :favorites, :as => :favorited
has_many :fans, :through => :favorites, :source => :user
end
class Comment
has_many :favorites, :as => :favorited
has_many :fans, :through => :favorites, :source => :user
end
class Favorite
belongs_to :user
belongs_to :favorited, :polymorphic => true # note direction of polymorphy
end
class User
has_many :favorites
has_many :favorite_notes, :through => :favorites, :source => favorited, :source_type => "Note"
has_many :favorite_comments, :through => :favorites, :source => favorited, :source_type => "Comment"
has_many :favorite_discussions, :through => :favorites, :source => favorited, :source_type => "Discussion"
end
(只是正确设置你的数据库)这个设计是这种用户收藏的标准。