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