如何在 rails 中连接 1:N 表,而不是多行记录,获取一行包含连接表中 ID 数组的额外列



我有 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]>

我的数据库是邮政 作为输出,我需要 gem ajax-datatables-rails 的活动记录关系

使用 Postgresql,您可以使用array_agg聚合函数:

Mission.
joins(guild: :guild_coordinators).
select('missions.*, array_agg(guild_coordinators.id) as coordinators').
group(:id)

你得到的正好是ActiveRecord::Relation,它将包含(调用后(Mission对象,并带有附加字段coordinators:Array。

第二种选择是使用.includes,如我或@garrett-motzner评论显示。

最新更新