我想在我的应用程序中添加评论,以便视频的所有者可以为该视频选择并排评论列/表单的数量,并为每列添加标题,然后用户可以评论一个或更多列。
我正在考虑设置一个VideoComment模型,其表格如下所示:
-------------------------------------
id | video_id | user_id | comment_id
然后,视频将通过VideoComment与评论相关联。此外,用户可以通过VideoComment与每个评论和视频建立联系。
为了支持多列,我正在考虑让Comment与另一个模型CommentColumns有一个habtm关联。
评论将如下所示:
-----------------------------
id | body
CommentColumns将如下所示:
------------------------
id | title
注释和commentColumn之间的连接表将是CommentMatching:
------------------------------
comment_id | comment_column_id
我的第一个问题是......我是在正确的轨道上,还是我离得很远?
我的第二个问题是......在我的控制器中访问不同数据关联的所有可能组合是什么?
PS。别害羞!如果您希望我澄清一些问题,请问我任何问题。
答案 0 :(得分:4)
我会建议更多关于论坛如何为你所描述的内容工作的内容:
然后你的关联有点简单,你甚至不需要任何HABTM类型的关联。
所有可能的组合是什么?载荷,但这里有几个例子:
#Create a video
@user.videos.create(...attributes...)
#Create a topic
@video.topics.create(...attributes...)
#Create a comment
@topic.comments.create(...attributes...)
#Find all comments from a user
@user.comments
#Find all comments from a particular topics
@topic.comments
#Find all comments from a particular user on a particular topic
@topic.comments.where(:user=>foo)
希望这是有道理的。
- 编辑 -
您可以通过不同的方式查找特定视频的所有评论,问题是您需要什么?
如果您只想在视图中显示它们,最简单的事情就是这样(在HAML中):
- for topic in @video.topics do
= topic.title
- for comment in topic.comments do
= comment.body
要将它们全部作为查询返回,我想你可以做类似的事情......
# untested
Comment.joins(:topics).where('topics.video_id' => video.id)
您可以针对每个视频的用户评论执行相同操作,或者您可以添加评论belongs_to视频的关联。一个警告,虽然...... - 编辑出来,见下文---
- 编辑 -
好的,我把它拿回来,我记得自己错误的应用程序。我无法回忆起关于将评论与视频和主题相关联的“陷阱”,因此最简单的方法就是将评论设置为belongs_to视频。请确保并测试关联,这样您就不会在记录中获得video = nil
。我没有对此进行测试,但我记得像@video.topics.first.comments.create(:attributes)
这样的视频构建实际上并不创建视频关联,只有主题关联。我想我必须做更多的事情:
@topic.comments.create(...attributes..., :video=>@topic.video)
测试并确定。
现在我回头看看我自己的代码,当我需要构建一个嵌套关系时,我需要构建一个嵌套关系,其中一个对象可以属于同一个类的父级和一个父容器。 IE:评论可能有嵌套的回复,因此评论属于主题,也属于其他评论。这就是麻烦。属于一个主题和一个视频的评论很好。
抱歉精神失误:)
在你得到你的协会之后就做......
@video.comments.where(:user=>some_user)
..您将获得特定用户视频的所有评论。