在查询中,我想从已连接的表中选择字段并获取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;它?