Experiment has_many :features
Feature belongs_to :experiment
Experiment.where("experiments.id=1")
.joins(:features)
.pluck("features.id", "experiments.id")
我希望这会返回每个功能的ID和实验的ID。
[
[1, 1],
[2, 1],
[3, 1],
# ....
]
相反,这将返回实验的ID,然后返回nil
[
[1, nil],
[1, nil],
[1, nil],
# ....
]
这在三个方面很奇怪:
这似乎是一个错误,但也许我做错了什么。有什么提示吗?
SQL输出:
SELECT features.id, experiments.id FROM "experiments" INNER JOIN "features" ON "features"."experiment_id" = "experiments"."id" WHERE (experiments.id=1)
请注意。这是一个与查询类似的简化问题:
Experiment.where("experiments.id=1")
.joins(feature: { child2: { :child3 } })
.pluck("feature.id, child3.id")
答案 0 :(得分:8)
这有点棘手。由于存在INNER JOIN
,因此查询在此实例中仅生成一个id
。实际上你可以反过来形成查询:
Feature.joins(:experiment)
.where(features: { experiment_id: 1 })
.pluck(:id, :experiment_id)
或者:
Feature.joins(:experiment)
.where(experiments: { id: 1 })
.pluck(:id, :experiment_id)
答案 1 :(得分:3)
发布到rails github后,我发现我的特定问题已在最新的rails版本(4.1.6)中得到解决。