У меня есть довольно простые ассоциации ActiveRecords, подобные таким (в частности, в Rails 4):
- В организации много пользователей
- Пользователь принадлежит к организации
Но с точки зрения запросов ActiveReocord, каков оптимальный способ построения запроса для возврата массива организаций, каждая из которых имеет свой собственный массив идентификаторов пользователей, связанных с самой собой? В принципе, я хотел бы вернуть следующую структуру данных:
#<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
не является частью таблицы Organizations, а просто атрибутом, созданным на лету ActiveRecord.
Заранее спасибо.
РЕДАКТИРОВАТЬ: Попробовав несколько вещей, я придумал что-то, что вернуло результат в том формате, который я искал. Но я до сих пор не уверен (и не убежден), что это самый оптимальный запрос:
Organization.joins(:users).select("organizations.*, '[#{User.joins(:organization).pluck(:id).join(',')}]' as user_ids").group('organizations.id')
В качестве альтернативы подход JBuilder/Rabl, предложенный @Kien Thanh, кажется очень разумным и доступным. Считается ли это лучшей практикой в настоящее время для разработки API на основе Rails (в приложении полностью отделены внутренние и внешние части)?