разница в Rails 3 присоединяется к Rails 2 - PullRequest
0 голосов
/ 11 августа 2011

При переносе нашего приложения rails2 на rails3 мы обнаружили (еще одну!) Тонкую разницу. Лично мне кажется, что sql, генерируемый объединениями, неверен.

Учитывая модель, которая выглядит следующим образом:

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 слегка отличаются от rails 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' )  "

Рельсы 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.

Почему это?

1 Ответ

0 голосов
/ 11 августа 2011

В Rails3 вы можете использовать запросы типа

 @alternative_drugs = Claim.joins('left join drugs on claims.ndc = drugs.ndcupchri ').select('claims.id, claims.member_id, claims.ndc').where("claims.nabp in ('1','2')").group(:ndc).order('calculated_price asc').all
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...