gpt4 book ai didi

ruby-on-rails - 建立这些复杂模型关联的最佳方式是什么?

转载 作者:搜寻专家 更新时间:2023-10-30 22:03:48 25 4
gpt4 key购买 nike

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

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

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

然后视频将通过 VideoComment 与评论相关联而具有 has_many。此外,通过 VideoComment 与每个评论和视频的关联,用户将拥有一个 has_many。

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

评论看起来像这样:

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

CommentColumns 将如下所示:

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

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

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

我的第一个问题是......我走在正确的 rails 上,还是离得很远?

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

附言。不要害羞!如果您希望我澄清一些问题,请问我任何问题。

最佳答案

我会根据论坛如何为您所描述的内容推荐更多内容:

  • 一个用户有_很多视频和评论
  • 一个视频有_很多主题
  • 主题属于_视频并且有_很多评论
  • 评论属于用户和主题

那么您的关联就有些简单了,您实际上什至不需要任何 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)

希望这是有道理的。

-编辑-

您可以通过不同的方式找到特定视频的所有评论,问题是您需要它们做什么?

如果你只是想在你的 View 中显示它们,最简单的事情就是这样(在 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)

您可以对每个视频的用户评论执行相同的操作,或者您可以只添加评论属于视频的关联。不过,有一个警告……——已删除,见下文——

-编辑-

好吧,我收回,我自己的app记错了。关于将评论与视频和主题相关联,我没有任何“陷阱”,所以最简单的方法就是将评论也设置为 belong_to 视频。确保并测试这些关联,这样您的记录中就不会出现 video = nil。我没有对此进行测试,但我记得像 @video.topics.first.comments.create(:attributes) 这样的视频构建实际上并没有创建视频关联,只有主题关联。我想我必须做一些更像是:

@topic.comments.create(...attributes..., :video=>@topic.video)

测试并确定。

现在我回顾我自己的代码时,我记得遇到的麻烦是当我需要建立一个对象可以属于同一类的父类和父容器的嵌套关系时。 IE:评论可以嵌套回复,所以评论属于话题,也属于其他评论。这就是引起麻烦的原因。属于一个主题和一个视频的评论是可以的。

抱歉我的精神失常:)

在你得到你的协会之后,就做...

@video.comments.where(:user=>some_user)

..您将从特定用户那里获得对视频的所有评论。

关于ruby-on-rails - 建立这些复杂模型关联的最佳方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5527234/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com