Как отсортировать результаты ActiveRecord, используя атрибут в суперклассе? - PullRequest
0 голосов
/ 17 сентября 2010

У меня есть две модели:

class Manufacturer < ActiveRecord::Base
  has_many :models
end

class Model < ActiveRecord::Base
  belongs_to :manufacturer
  belongs_to :model
end

Я хочу найти всех производителей, чьи модели относятся к данной категории:

manufacturers = Model.find(:all, :conditions=>["vehicle_category_id = 1"], :include => :manufacturer, :group => "manufacturer_id").map {|model| model.manufacturer }

Но я хочубыть в состоянии упорядочить результаты по названию производителя, т.е. factoryr.name

Знаете, как я могу это сделать?

ОБНОВЛЕНИЕ:

Это работаетдля меня, но кажется очень неэффективным, должно быть лучше:

manufacturers = (Model.find(:all, :conditions=>["vehicle_category_id = 1"], :include => :manufacturer, :group => "manufacturer_id").map {|model| model.manufacturer }).compact.sort{|x,y| x.name <=> y.name} 

1 Ответ

0 голосов
/ 17 сентября 2010

Раствор 1

Manufacturer.all(
  :condition => [ "EXISTS (
                    SELECT a.id 
                    FROM   models a 
                    WHERE  a.manufacturer_id     = manufacturers.id AND 
                           a.vehicle_category_id = ?
                   )",
                  1
                ],
  :order     => "manufacturers.name"
)

Раствор 2

Manufacturer.all(
  :select    => "DISTINCT manufacturers.*",
  :joins     => :models,
  :condition => [ "models.vehicle_category_id = ?", 1],
  :order     => "manufacturers.name"
)
  • Решение 2 использует рельсовые конструкции.

  • Решение 1 быстрее, чем решение 2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...