我正在尝试在rails中设计模型关联 由以下3种类型组成:
评论员,博客文章和评论
- >它是“评论员”,而不是“用户”是什么意思 他们不是创建博客帖子的用户...... 相反,他们只创建评论。
虽然评论员之间的基本关系 评论很明显:class Commentator < ActiveRecord::Base
has_many :comments
class Comment < ActiveRecord::Base
belongs_to: comments
我不确定如何将“Blogpost”与此相关联...... - &GT;我想能够要求所有的Blogposts 评论员和所有评论员都离开了 一个特定的Blogpost。
因为这是一种多对多的关系 会使用:
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 由我自己进入评论表的相应字段?
我认为最好将Blogposts作为 因为关系可以通过元素 在评论员创建评论时自动构建。 (除了评论员不能创建评论这一事实 到不存在的Blogposts ...) 但是,评论的评论员不会是多对多的 关系,我再也不能使用“has_many ...... through”了。
将这3种模型联系起来的好方法是什么?
答案 0 :(得分: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
向现有博客帖子添加评论(假设我们有blog
和commentator
个变量)
blog.comments.create(:commentator => commentator, :comment => "foo bar")
OR
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")