【发布时间】:2012-07-30 03:52:50
【问题描述】:
我不确定这是否是活动记录错误。 或者有没有办法做 .includes 并明确禁用 LEFT OUTER JOIN 策略。 这是我的案例:
假设关键字是没有“点”的“abc”
Post.where(:name => "abc").includes(:author)
正常使用两个sql
Post Load (0.8ms) SELECT `posts`.* FROM `posts` WHERE `posts`.`name` = 'abc'
Author Load (0.4ms) SELECT `authors`.* FROM `authors` WHERE `authors`.`id` IN (1)
假设关键字是“abc”。有一个“点”
Post.where(:name => "abc.").includes(:author)
sql 使用的是 LEFT OUTER JOIN 策略,这很混乱。
SELECT `posts`.`id` AS t0_r0, `posts`.`name` AS t0_r1, `posts`.`author_id` AS t0_r2, `posts`.`created_at` AS t0_r3, `posts`.`updated_at` AS t0_r4, `authors`.`id` AS t1_r0, `authors`.`created_at` AS t1_r1, `authors`.`updated_at` AS t1_r2
FROM `posts` LEFT OUTER JOIN `authors` ON `authors`.`id` = `posts`.`author_id`
WHERE `posts`.`name` = 'abc.'
我知道,当关联存在条件时,使用 LEFT OUTER JOIN 策略可以实现带有包含的即时加载,例如
Post.includes(:author).where(:authors => {:name => 'zhougn' })
但在我的测试用例中,没有这样的条件。基本上 Multi-SQL 策略和 LEFT OUTER JOIN 策略都可以给我正确的结果,但是当 Posts 和 Authors 存储在不同的数据库中时,LEFT OUTER JOIN 策略会失败。
【问题讨论】:
标签: ruby-on-rails-3 activerecord eager-loading