だから.. 3.0.6 から 3.0.14 にアップグレードしただけで、私のテストの 1 つがひどく失敗し始めました (すばらしい!)。私のwhere句が間違って形成されていて、いわば「それを回避している」だけだと指摘しました(私は思います)。確認したかっただけです(そして、誰かがこの変更が文書化されている場所に関する文書を見つけることができる場所を教えてくれれば)。
いくつかのコード:
@fields = Field.joins(:region => :country).where(:regions => {:country_id => @country}).order(:name)
幸せな SQL を生成します
"SELECT `fields`.* FROM `fields` INNER JOIN `regions` ON `regions`.`id` = `fields`.`region_id` INNER JOIN `countries` ON `countries`.`id` = `regions`.`country_id` WHERE `regions`.`country_id` = 5 ORDER BY name"
ただし、このクエリは...
@pools = Pool.joins(:field => {:region => :country}).where(:fields => {:regions => {:country_id => @country }},:confirmed => true).order(:leaving_date)
これにより、3.0.6 で ok SQL が生成されます
"SELECT `pools`.* FROM `pools` INNER JOIN `fields` ON `fields`.`id` = `pools`.`field_id` INNER JOIN `regions` ON `regions`.`id` = `fields`.`region_id` INNER JOIN `countries` ON `countries`.`id` = `regions`.`country_id` WHERE `pools`.`confirmed` = 1 AND `regions`.`country_id` = 5 ORDER BY leaving_date"
しかし、3.0.14 では、国 ID の値が壊れています (アクティブなレコード全体のようです?)
"SELECT `pools`.* FROM `pools` INNER JOIN `fields` ON `fields`.`id` = `pools`.`field_id` INNER JOIN `regions` ON `regions`.`id` = `fields`.`region_id` INNER JOIN `countries` ON `countries`.`id` = `regions`.`country_id` WHERE `pools`.`confirmed` = 1 AND `fields`.`regions` = '--- \\n:country_id: !ruby/ActiveRecord:Country \\n attributes: \\n name: Test Country 1\\n latitude: \\\"13.456\\\"\\n created_at: 2012-06-27 10:28:46 Z\\n updated_at: 2012-06-27 10:28:46 Z\\n id: 2\\n cached_slug: test-country-1\\n longitude: \\\"46.789\\\"\\n message: \\n zoom: 4.0\\n' ORDER BY leaving_date"
誰かがここで何が起こっているのか説明できるかどうか疑問に思っています。おそらくうまくいかなかったはずだと思います..