0

假设我有一个具有“收藏夹”功能的应用程序,用户可以在其中将文档、注释或评论添加到他的收藏夹列表中。

在我脑海里..

  • 用户has_many收藏
  • 收藏belongs_to用户

  • 记录belongs_to收藏夹
  • belongs_to下收藏夹
  • 评论belongs_to收藏

这种关联有什么问题,多态关联有什么帮助?

4

1 回答 1

1

因为那样你的 Favorite 实例将不知道它喜欢什么 :) 它知道它has_one :note,但也有 has_one :comment,或者?但肯定不是两者兼而有之。

多态关联相反的方式会有所帮助,因为它将表示一个Favorite对象属于:favorited多态的对象,因为它可以是任何类,其名称将存储在:favorited_type字符串 db 列中,因此您最喜欢的对象会知道它偏爱注释或文档或评论。

有一些代码

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

(只需正确设置您的数据库)此设计是此类收藏用例的标准。

于 2012-05-30T00:45:44.520 回答