0

我正在尝试在包含以下 3 种类型的导轨中设计模型关联:

评论员、博文和评论

--> 它是“评论者”而不是“用户”,这意味着他们不是创建博客文章的用户......相反,他们只创建评论。

而 Commentator 和 Comment 之间的基本关系是显而易见的:

class Commentator < ActiveRecord::Base
    has_many :comments

class Comment < ActiveRecord::Base
    belongs_to: comments

我不确定如何将“博客帖子”与此联系起来... --> 我希望能够询问评论员留下的所有博客帖子以及特定博客帖子的所有评论员。

由于这是一个多对多的关系,我会使用:

class Commentator < ActiveRecord::Base
    has_many :comments
    has_many :blogposts, :through => :comments

class Blogpost < ActiveRecord::Base
    "has_many :commentators, :through => :comments

评论员创建博文时,我必须将评论中的commenentator_id和blogpost_id自己写到评论表的对应字段中吗?

我认为将博客帖子作为贯穿元素会更好,因为当评论员创建评论时,可以自动建立关系。(除了评论员不能对不存在的博客帖子创建评论......)但是,评论员到评论将不是多对多的关系,我不能再使用“has_many ... through”了。

将这 3 种模型关联起来的好方法是什么?

4

1 回答 1

2

所述问题的解决方案

class Commentator < ActiveRecord::Base
  has_many :comments
  has_many :blogposts, :through => :comments
end

class Comment < ActiveRecord::Base
  belongs_to  :commentator 
  belongs_to  :blogpost  
end

class Blogpost < ActiveRecord::Base
  has_many :comments
  has_many :commentators, :through => :comments
  belongs_to :user

class User
  has_many :blogposts
end

向现有博客文章添加评论(假设我们有 ablogcommentator变量)

blog.comments.create(:commentator => commentator, :comment => "foo bar") 

或者

commentator.comments.create(:blog => blog, :comment => "foo bar")   

笔记

我不会为用户使用两个模型(即用户和评论者),而是使用一个模型并分配权限来区分评论者和博客文章作者。

class User
  has_many :blogs
  has_many :comments
  has_many :commented_blogs, :through => :comments, :source => :blog
end

class Blog
  has_many :comments
  belongs_to :user
  has_many :commenters, :through => :comments, :source => :user
end

class Comment
  belongs_to :user
  belongs_to :blog
end  
  • 创建博客条目:

    if current_user.has_role?(:blog_writer)
      current_user.blogs.create(params[:blog])
    end
    
  • 添加评论:

    current_user.comments.create(:blog => blog, :content => "foor bar")
    

    或者

    blog.comments.create(:user => current_user, :content => "foor bar")
    
于 2012-06-17T05:35:52.690 回答