ActiveRecord选择不使用外连接?

时间:2016-05-26 08:24:23

标签: ruby-on-rails ruby ruby-on-rails-4 activerecord spree

在查询中,我想从已连接的表中选择字段并获取ActiveRecord的关系对象。

它适用于内部联接:

Spree::Product.joins(:promotion_rules).
  select('spree_promotion_rules.promotion_id').first.promotion_id
# => 1

类似表达式但使用外连接忽略select方法的指定字段 返回原始对象:

Spree::Product.eager_load(:promotion_rules).
  select('spree_promotion_rules.promotion_id').first.promotion_id
# NoMethodError: undefined method `promotion_id' for #<Spree::Product:0x00000007cd98b0>

这很奇怪,因为生成的SQL查询是正确的,应该包含已连接的表格字段:

Spree::Product.eager_load(:promotion_rules).
  select('spree_promotion_rules.promotion_id').to_sql
=> "SELECT spree_promotion_rules.promotion_id, \"spree_products\".\"id\" AS t0_r0, …
    LEFT OUTER JOIN \"spree_promotion_rules\" ON \"spree_promotion_rules\".\"id\" = …"

当作为原始SQL字符串传递时,它返回预期结果:

ActiveRecord::Base.connection.execute(
  Spree::Product.eager_load(:promotion_rules).
    select('spree_promotion_rules.promotion_id').to_sql).first['promotion_id']
=> "1"

知道为什么select不适用于OUTER JOIN以及如何解决&#34;修复&#34;它?

0 个答案:

没有答案