default_scope с: joins и: select - PullRequest
       36

default_scope с: joins и: select

3 голосов
/ 29 октября 2009

Я пытался определить default_scope следующим образом:

default_scope :joins => :product, :select => "catalog_products.*, products.*"

Что я получаю от Rails, так это:

 SELECT catalog_products.* FROM `catalog_products` INNER JOIN `products` ON `products`.id = `catalog_products`.product_id 

Когда я определяю его как named_scope, все в порядке:

named_scope :extended, :joins => :product, :select => "catalog_products.*, products.*"


SELECT catalog_products.*, products.* FROM `catalog_products` INNER JOIN `products` ON `products`.id = `catalog_products`.product_id 

Это должно быть ошибкой или это правильное поведение?

Я использую Rails 2.3.4.

Спасибо!

1 Ответ

5 голосов
/ 30 октября 2009

Это поведение с отступом. Независимо от того, как вы определяете область действия, вы можете получить только объекты класса, определяющие область действия. Несмотря на то, что вы выбираете столбцы моделей, Rails ничего с ними не сделает. Однако вы можете стремиться к загрузке ассоциаций. Похоже, что вы пытаетесь это сделать с продуктом на каждой находке.

На самом деле все проще, чем вы ожидаете:

default_scope :include => :product

Причина, по которой ваш оператор select является частью запроса в именованной области, но не является областью по умолчанию, заключается в том, что каждый запрос на основе rails переопределяет параметры выбора запросов далее по цепочке методов. Единственные параметры SELECT, которые имеют какое-либо значение для того, что возвращают операторы find, - это те, которые выбирают подмножество столбцов модели.

...