我有一个非常简单的ActiveRecords关联,例如(特别是在Rails 4中):
但是就ActiveReocord查询而言,构造查询以返回一个组织数组的最佳方式是什么,每个组织都具有与之关联的自己的用户ID数组?基本上,我想返回以下数据结构:
#<ActiveRecord::Relation [#<Organization id: 1, name: "org name",.... user_ids: [1,2,3]>, <Organization id: 2...>]>
...或进一步将其提取为JSON:
[{id: 1, name: 'org name', ... user_ids: [1,2,3]}, {...}]
其中users
不是组织表的一部分,而只是ActiveRecord动态构造的属性。
提前致谢。
编辑:尝试了几件事之后,我想出了一些以我想要的格式返回结果的东西。但是我仍然不确定(也不确信)这是否是最佳查询:
Organization.joins(:users).select("organizations.*, '[#{User.joins(:organization).pluck(:id).join(',')}]' as user_ids").group('organizations.id')
或者,@ Kien Thanh提出的JBuilder / Rabl方法似乎非常合理且易于使用。如今,这是否被视为当前基于Rails API开发的最佳实践(该应用程序的后端和前端部分完全分离)?
对于诸如JBuilder
或的库解决方案,唯一要注意的Rabl
是在构建json时观察性能。
至于查询,请使用includes
而不是joins
拉回数据。
orgs = Organization.includes(:users)
您不必以这种方式对结果进行分组(除非分组是为了某个汇总值)。
ActiveRecord::Relation
为您提供了一些自动辅助方法,其中之一是association_ids
。
因此,如果您通过哈希创建自己的JSON,则可以
orgs.map! {|o| o.attributes.merge(user_ids: o.user_ids).to_json }
编辑:忘记为http://guides.rubyonrails.org/association_basics.html#has-many-association-reference添加参考has_many
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句