我有 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评论显示。