繁体   English   中英

建立这些复杂模型关联的最佳方法是什么?

[英]What's the best way of setting up these complicated model associations?

我想在我的应用程序中添加评论,以便视频的所有者可以为该视频选择并排评论列/表单的数量,并为每列添加标题,然后用户可以评论一个或多个列。

我正在考虑设置一个VideoComment模型,其表格如下所示:

-------------------------------------
id | video_id | user_id | comment_id

然后,视频将通过VideoComment与评论相关联。 此外,通过VideoComment,用户可以通过与每个评论和视频的关联进行has_many。

为了支持多列,我正在考虑让Comment与另一个模型CommentColumns有一个habtm关联。

评论将如下所示:

-----------------------------
id | body

CommentColumns将如下所示:

------------------------
id | title

注释和commentColumn之间的连接表将是CommentMatching:

------------------------------
comment_id | comment_column_id

我的第一个问题是......我是在正确的轨道上,还是我离我很远?

我的第二个问题是......访问控制器中不同数据关联的所有可能组合是什么?

PS。 别害羞! 如果您希望我澄清一些问题,请问我任何问题。

我会建议更多关于论坛如何为你所描述的内容工作的内容:

  • 用户有很多视频和评论
  • 一个视频has_many主题
  • 一个主题belongs_to video和has_many comments
  • 评论属于用户和主题

那么你的关联有点简单,你甚至不需要任何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)

..并且您将获得来自特定用户的视频的所有评论。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM