Ruby on rails 如何让数据库表显示';你喜欢这个';对于用户,在包含帖子列表的页面上

Ruby on rails 如何让数据库表显示';你喜欢这个';对于用户,在包含帖子列表的页面上,ruby-on-rails,database,Ruby On Rails,Database,有一个页面可以列出帖子。对于一个登录的用户来说,在数据库中保存表的最好方法是什么,这有助于在他喜欢的帖子上显示“你喜欢这个”。 这类似于facebook在用户已经喜欢的提要上显示“你喜欢这个”的方式。我的建议是 创建新表Like(用户id、发布id、Like) 使用此表跟踪用户的喜好 编辑: 如果要在一个查询中获取所有查询,请使用serialize 表格将类似于(用户id、状态(类型应为:文本)) 相似模型 serialize :status 用这个, like = Like.new lik

有一个页面可以列出帖子。对于一个登录的用户来说,在数据库中保存表的最好方法是什么,这有助于在他喜欢的帖子上显示“你喜欢这个”。 这类似于facebook在用户已经喜欢的提要上显示“你喜欢这个”的方式。

我的建议是

创建新表
Like(用户id、发布id、Like)

使用此表跟踪用户的喜好

编辑:

如果要在一个查询中获取所有查询,请使用serialize

表格将类似于(用户id、状态(类型应为:文本))

相似模型

 serialize :status
用这个,

like = Like.new
like.user = user
like.status = {liked: post.id}
like.save

查看有关serialise的更多信息

创建Post和用户之间的HABTM关系,如果愿意,您甚至可以调用表“likes”。然后您将拥有
@post.users
,其中将列出喜欢此帖子的用户,以及
@user.post
s,其中将列出用户喜欢的帖子。 在这种情况下,联接表是没有意义的,除了两个外键之外,您不需要任何额外的字段

另外,50多篇文章不应该在你的服务器上产生任何类型的负载。数据量非常小。问题更可能出现在渲染中,而不是代码的后端部分。是的,您可以在一次查询中获得信息,方法是在查询帖子的过程中加载或预加载联接表。类似于
Post.的内容包括(:用户)

Post.eager\u load(:users)

我想这个gem会结束你的搜索,我只是创建了这个。但当页面上列出50多篇文章时,查询每篇文章在服务器上的负载将过大,在客户端上的延迟将过大。这个表可以在一次查询中实现吗?我没有得到你想要说的。我所做的是创建了一个Like(user\u id,post\u id)表。我所说的延迟/负载是在服务器上为每篇文章进行50多次查询,并找出当前用户是否喜欢它。我使用的关系是->属于用户,发布。post->HM Likes,User->HM Likes你所做的正是我想告诉你不要做的。您不需要额外的带有模型的表,并且具有多个:通过关系。您可以使用just has_和_besides_to _many和一个没有模型的联接表来实现这一点。您能详细解释一下您的解决方案吗。我理解habtm的关系,但如何有效地使用它是我的疑问。你是说如何有效地使用它?执行post.users(即通过HBTM关系进行查询)将为您提供一个喜欢此帖子的用户列表。执行user.posts会提供该用户喜欢的所有帖子。这是最有效的。