Rails - 如何在没有查询返回重复项的情况下选择记录和那些记录has_many子项

时间:2016-09-09 14:27:32

标签: ruby-on-rails postgresql activerecord

给出这些模型

ModelOne
    has_many :model_twos

ModelTwo
    belongs_to :model_one

    string :field_one

并给出这些记录

model_twos
    id  field_one  model_one_id
    1  "val 1"     1
    2  "val 2"     1
    3  "val 3"     1
    4  "val 4"     2
    5  "val 5"     2
    6  "val 6"     2

如何在一个查询中检索所有model_onesmodel_ones model_twos field_one值,而不返回每个model_one的3个实例

我尝试了ModelOne.joins("LEFT JOIN model_twos ON model_twos.model_one_id = model_ones.id").select("DISTINCT model_ones.*, model_twos.field_one as model_two_field_one")的各种排列,但没有给出我正在寻找的结果

我想要一个rails方式来做,但我也很高兴有一个可以工作的SQL查询

1 个答案:

答案 0 :(得分:0)

我设法使用

让它工作

ModelOne.joins("LEFT JOIN model_twos ON model_twos.model_one_id = model_ones.id").select("DISTINCT model_ones.*, (SELECT array(SELECT model_twos.field_one FROM model_twos WHERE model_twos.model_one_id = model_ones.id)) as model_two_field_one")