2013-04-11 34 views
0

我有兩種不同的模型,我需要在選擇查詢中加入一起,並在頁面上列出。他們共享我需要在視圖中引用的所有屬性(created_at,updated_at,name等),並且我希望它們按照創建的順序進行。我想知道最有效的方法是什麼?我正在考慮對每個對象分別執行選擇查詢,並將相關部分添加到一個公共數組中,但效率不高。在Rails中加入兩個不同模型查詢的最佳方法?

例如,如果我的型號分別爲狗和貓和我想的5歲以下所有的狗和貓的,我想是這樣

@pets = [] 
dogs = Dogs.where(:age => 5) 
cats = Cats.where(:age => 5) 
dogs.each do |dog| 
    hash = {"id" => dog.id, "name" => dog.name, "created_at" => dog.created_at } 
    @pets.push(hash) 
end 
cats.each do |cat| 
    hash = {"id" => cat.id, "name" => cat.name, "created_at" => cat.created_at } 
    @pets.push(hash) 
end 

但是,這是最好的方式做一個列表?還有,我不知道如何根據創建日期本例中,成品數組排序...

回答

1

試試這個

dogs = Dogs.where(:age => 5) 
cats = Cats.where(:age => 5) 
@pets = (dogs + cats).sort_by { |pet| pet.created_at } 

或者如果你想你的哈希的是,使用地圖創建陣列的散列

dogs = Dogs.where(:age => 5) 
cats = Cats.where(:age => 5) 
@pets = (dogs + cats).sort_by do |pet| 
    pet.created_at 
end.map do |pet| 
    { "id" => dog.id, "name" => pet.name, "created_at" => pet.created_at } 
end 
+0

第一種解決方案非常好,謝謝! – user1436111 2013-04-11 03:23:21

相關問題