gpt4 book ai didi

ruby-on-rails - 如何显示多个模型的列表

转载 作者:太空宇宙 更新时间:2023-11-03 18:03:36 26 4
gpt4 key购买 nike

我在 Facebook 等社交网络媒体上工作。用户可以创建每日帖子和事件。

在时间轴中,我想显示@post@event 的组合列表。我可以在 Rails 上构建它吗?

Controller 中的下面这个怎么样:

@feed = Post.all + Event.all

我还应该划分每个缩略图 View 。

所以多个项目合并。

最佳答案

将每一个 Post 和 Event 添加到内存数组中真的很危险,不要那样做!

我可以为您的问题想出 2 种解决方案。


1-最简单

每次创建其中一个时,将具有多态关联的额外模型添加到 Post 或 Event 和 created_at 中。然后您可以在数据库级别对该额外模型进行排序和分页。这样你就不会有内存问题。

您可以使用一些辅助方法来预加载该结果集的帖子和事件,以防止出现 N+1 查询问题,因为您不能在多态关联上使用包含/引用。

优点:易于实现

缺点:增加了一个额外的模型,你需要实现信息的预加载以防止 N+1 查询,如果你需要添加一些 where 语句你将不得不复制数据或与其他表连接。


2-最难

对两个表使用 UNION 查询并返回必要的字段以显示它们。

union_qry = "(SELECT 'Post', id, created_at, '' as title, '' as place FROM posts) UNION (SELECT 'Event', id, created_at, title, place FROM events)"

arr = ActiveRecord::Base.connection.execute("#{search_qry} ORDER BY created_at DESC LIMIT #{per} OFFSET #{offset}") #note the per and offset if you need pagination

该查询将返回一个 MySQL::Result,您可以对其进行迭代,并且对于每条记录,您将拥有一个如下所示的数组:

['Post', post_id, post_created_at, '', '']

['Event', event_id, event_created_at, event_title, event_place]

使用这些数组,您可以构建您的 Post+Event 列表,如果您需要更多数据,只需将其添加到 UNION 语句即可。

优点:不需要额外的元素,不需要重复信息,你可以在其他字段上使用where

缺点:它离 ActiveRecord 很远,没有很好的查询,没有很好的 ActiveRecor 对象


我个人更喜欢选项 2,它更灵活,但选项 1 更容易。

关于ruby-on-rails - 如何显示多个模型的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55308877/

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