我有 3 个模型
class Mission < ActiveRecord::Base
belongs_to :guild
end
class Guild < ActiveRecord::Base
has_many :missions
has_many :guild_coordinators, :dependent => :destroy
has_many :coordinators, :through=> :guild_coordinators, :class_name => "Associate"
end
class GuildCoordinator < ActiveRecord::Base
belongs_to :guild
belongs_to :coordinator, :class_name => "Associate"
end
如果我这样做
Mission.joins(:guild => :guild_coordinators)
我为每个行会 -> 行会协调员协会获取行
是否可以获取已加入公会的任务的唯一记录,并在一列中获取数组中所有协调员的 ID?
编辑: 预期结果是这样的:
#<ActiveRecord::Relation [#<Mission id: 13, fy: 2018, guild_id: 31, name: "test mission", status: 0, coordinators: [1,2,3,5,8]>
我的数据库是postgres 作为输出,我需要 gem ajax-datatables-rails 的 Active Record 关系
请您参考如下方法:
使用 Postgresql,您可以使用 array_agg aggregate function :
Mission.
joins(guild: :guild_coordinators).
select('missions.*, array_agg(guild_coordinators.id) as coordinators').
group(:id)
你得到的正是 ActiveRecord::Relation,它将包含(调用后)Mission 对象以及附加字段 coordinators:Array。
第二个选项是使用 .includes 就像我或 @garrett-motzner 评论所示。