2011-01-25 3 views
1

Предположим, у меня есть следующие модели:ActiveRecord запроса заказа

class Car < ActiveRecord::Base 
    belongs_to :seat 
    ... 
end 

class Seat < ActiveRecord::Base 
    belongs_to :color 
    ... 
end 

class Color < ActiveRecord::Base 
    attr_reader :name 
    ... 
end 

Если я получить список автомобилей, и я хочу порядка КАРС по color.name, как написать запрос заказа?

class Car < ActiveRecord::Base 
    belongs_to :seat 
    ... 
    def cars_order_by_color(car_ids) 
     where(:id=>car_ids).order(?????) #HOW TO ORDER BY COLOR.name 
    end 

end 

ответ

1

Если вы используете joins в вашем запросе, вы можете сортировать по соединяемых таблиц (либо seats или colors):

Car.joins(:seat => :color).order("colors.name") 
0

Для извлечения записей из базы данных в определенном порядке вы можете указать опцию: order для поиска.

Car.order("color") 

Вы можете указать ASC или DESC, а также:

Car.order("color DESC") 

Для получения дополнительной помощи в запросе смотрите здесь: active_record_querying

Надеется, что это помогает.

Редактировать

Вы можете использовать find_by_sql:

Car.find_by_sql("SELECT * FROM clients 
    INNER JOIN orders ON clients.id = orders.client_id 
    ORDER clients.created_at desc") 

Написать соответствующий запрос.

+0

Привет, Гарри Джой, спасибо за ваш ответ, но ваш ответ не то, что Я ожидал, я знаю, как заказать. Если вы тщательно проверяете мои модели, мой вопрос заключается в упорядочивании связанными объектами модели. Я хотел бы заказать Cars by Color, где «Цвет» - это модель, связанная с «Seat», а «Seat» - это модель, связанная с «Car». Это я хочу заказать автомобили по color.name, такого рода порядок, я не уверен, как реализовать. – Mellon