如何定义与多个不同模型之一的 'has_one style' 关联?
How to define a 'has_one style' association with one of a multiple different models?
有什么方法可以定义模型之间的 has_one 样式关联,其中关联可以与两个不同模型之一的实例关联?特别是,我有以下型号:
Post
评论
一个用户发表了post,其他用户可以发表评论。但用户也可以评论其他评论(如 Facebook 线程)。我试图通过说评论可以有目标(并且目标可以是 Post 或其他评论)来反映我项目中的这种关系。
我认为这最好通过 has_one 关联来完成,但据我所知,has_one 关联只能用于将一个模型与另一个模型相关联。
如何在这些模型之间实现 has_many(或其他类似格式的)关系?
你想要polymorphic belongs_to
关系。 belongs_to
位于 Comment 模型正在执行的引用其他内容的一侧(具有 xx_id
列);考虑到 Post 会 has_many
评论,而 has_many
的反面是 belongs_to
。 Polymorphic = 可以引用任何模型。
你很幸运,因为 Rails 很久以前就处理过这个问题。这是polymorphic associations的经典例子。您需要像这样定义模型:
class Post
has_many :comments, as: :commentable
end
class Comment
# fields :commentable_type, type: String
# fields :commentable_id, type: Integer
belongs_to :user
belongs_to :commentable, polymorphic: true
has_many :comments, as: :commentable
end
您将能够在两者上调用 comments
,如:
post.comments
# And
post.comments.first.comments
有什么方法可以定义模型之间的 has_one 样式关联,其中关联可以与两个不同模型之一的实例关联?特别是,我有以下型号:
Post
评论
一个用户发表了post,其他用户可以发表评论。但用户也可以评论其他评论(如 Facebook 线程)。我试图通过说评论可以有目标(并且目标可以是 Post 或其他评论)来反映我项目中的这种关系。
我认为这最好通过 has_one 关联来完成,但据我所知,has_one 关联只能用于将一个模型与另一个模型相关联。
如何在这些模型之间实现 has_many(或其他类似格式的)关系?
你想要polymorphic belongs_to
关系。 belongs_to
位于 Comment 模型正在执行的引用其他内容的一侧(具有 xx_id
列);考虑到 Post 会 has_many
评论,而 has_many
的反面是 belongs_to
。 Polymorphic = 可以引用任何模型。
你很幸运,因为 Rails 很久以前就处理过这个问题。这是polymorphic associations的经典例子。您需要像这样定义模型:
class Post
has_many :comments, as: :commentable
end
class Comment
# fields :commentable_type, type: String
# fields :commentable_id, type: Integer
belongs_to :user
belongs_to :commentable, polymorphic: true
has_many :comments, as: :commentable
end
您将能够在两者上调用 comments
,如:
post.comments
# And
post.comments.first.comments