2011-01-25 99 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,然後你可以排序連接表(無論是seatscolors):

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

嗨,哈利喜悅,感謝您的回覆,但你的答案是不是有什麼我期望,我知道如何訂購。如果仔細檢查我的模型,我的問題是關於通過關聯的模型對象進行排序。我想訂購彩色汽車,其中「顏色」是與「座椅」相關的型號,「座椅」是與「汽車」相關的型號。這就是我想通過color.name訂購汽車,這種訂單,我不知道如何實施。 – Mellon 2011-01-25 13:37:54