Rails 活动记录具有自己的属性 + 关联对象的 ID



我有一个相当简单的ActiveRecords关联,比如(特别是在Rails4中):

  • 一个组织有许多用户
  • 用户属于某个组织

但就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]}, {...}]

其中CCD_ 1不是Organizations表的一部分,而只是ActiveRecord动态构建的属性。

提前谢谢。


编辑:在尝试了一些东西之后,我想出了一些东西,以我想要的格式返回结果。但我仍然不确定(也不相信)这是否是最理想的查询:

Organization.joins(:users).select("organizations.*, '[#{User.joins(:organization).pluck(:id).join(',')}]' as user_ids").group('organizations.id')

或者,Kien Thanh建议的JBuilder/Rabl方法似乎非常合理和可行。这被认为是目前基于Rails的API开发的最佳实践吗(该应用程序的后端和前端部分完全不耦合)?

对于JBuilderRabl这样的库解决方案,唯一需要注意的是在构建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 }

编辑:忘记添加has_many的参考http://guides.rubyonrails.org/association_basics.html#has-许多关联引用

最新更新