使用as_json时限制has_many输出

Limit the has_many output when using as_json to include

提问人:mihovale 提问时间:10/12/2023 更新时间:10/12/2023 访问量:38

问:

在我们的应用程序中,我们有相互连接的模型。 在我的示例中,我将使用 Client 和 Person。

一个人可以有很多客户,一个客户可以有很多人。

我们使用以下模式通过 API 返回数据

Person.first.as_json(include: { clients: { only: ['id', 'name'] } })

在某些情况下,个人和客户之间有很多联系。在我们的概述查询中,我们不想显示有关所有客户端的所有信息,只显示前 3 个,然后单击“更多”我们将加载其余部分。

我怎样才能实现这一点,希望对这种模式的改变最小? 我尝试在谷歌上搜索并检查其他类似的响应,但它们要么根本不起作用,要么涉及一些硬编码,这不是最佳选择,但在紧要关头,我甚至会对此感到满意。

我尝试添加一个刚刚被忽略的。limitas_json

我尝试添加一个类方法来更改输出并附加 但最终也编辑了模型。clients

我尝试从使用 SQL 到创建查询,但这并没有按预期工作。

Ruby-on-Rails ORM 限制

评论

1赞 max 10/13/2023
ActiveRecord 实际上没有一个很好的内置方法来“限制”关联 - 当使用预加载、eager_load等时,你不能只向查询添加限制,因为这会限制整个查询。相反,您需要执行变通方法来获取 X 条记录,分配它并将关联标记为已加载。mrbrdo.wordpress.com/2013/09/25/......
0赞 mihovale 10/13/2023
@max 感谢您的回复;我将检查您在博客文章中写的宝石;我可能也有一个想法,如何更“手动”地实现这一点,但仍在寻找一些好的指针。
1赞 max 10/15/2023
不幸的是,这似乎是一个更棘手的问题。LIMIT 在 SQL 中的工作方式是它应用于整个查询,而不是例如获取每个组的 N 行数。相反,您必须使用诸如执行窗口查询或横向联接之类的技术来获取最新记录的 ID。无论您想出什么解决方案,都将是特定于 RDBMS 的。

答: 暂无答案