0
在將我們的rails2應用程序遷移到rails3時,我們遇到了(另一種!)細微差別。就個人而言,它看起來像加入生成的SQL是錯誤的。Rails 3連接vs Rails 2的區別
給定一個模型,看起來像這樣:
class Event < ActiveRecord::Base
has_many :event_event_categories
has_many :locations, :class_name => "LocationCategory", :through => :event_event_categories, :source => :event_category, :uniq => true
...
end
我們做一些示波器需要使用位置的一些列。但查詢是Rails中2比軌道微妙的不同3根
梁2:
ree-1.8.7-2011.03 :037 > Event.joins(:locations).to_sql
=> "SELECT `events`.* FROM `events`
INNER JOIN `event_event_categories` ON (`events`.`id` = `event_event_categories`.`event_id`)
INNER JOIN `event_categories` ON (`event_categories`.`id` = `event_event_categories`.`event_category_id`) AND (`event_categories`.`type` = 'LocationCategory') "
的Rails 3:
ree-1.8.7-2011.03 :037 > Event.joins(:locations).to_sql
=> "SELECT `events`.* FROM `events`
INNER JOIN `event_event_categories` ON `events`.`id` = `event_event_categories`.`event_id`
INNER JOIN `event_categories` ON `event_categories`.`type` = 'LocationCategory'"
它不把
(`event_categories`.`id` = `event_event_categories`.`event_category_id`)
進入SQL。
這是爲什麼?
梁2應該像'Event.all(:加入=>:位置)',嗯?並且沒有'to_sql'方法 – fl00r
對不起 - 我正在使用fake_arel gem來獲取那些東西。 – phil