2012-10-22 66 views
1

我需要幫助。我正在優化Ruby項目。有很多單的查詢,所以我用的ID陣列讀取它們一次,例如:Ruby&Activerecord - 處理查詢結果

projects = Project.find_by_id(array_of_ids) 

而且我得到了在速度顯著改善。但問題是,當我想要搜索這樣的結果時,我該如何處理這樣的結果?

p = projects .find{ |project| project.id==pr.id } # doesn't work 

我可以將'projects'轉換爲數組還是使用主動記錄方法? 我可以使用Activerecord獲取按某些參數分組的「項目」二維數組嗎?

回答

0

有幾件事你缺少在這裏

a) projects = Project.find_by_id(array_of_ids) 

會給結果只有一個

獲取和數組,你需要解僱這樣的查詢

a) projects = Project.find_all_by_id(array_of_ids) 

哪個版本Rails是否使用如果Rails 3+,你想要什麼可以輕鬆完成與arel

b) projects = Project.where("id in (?)",array_of_ids) 

現在,這會給你一個關係對象,你可以鏈接你的furthur查詢就可以了

如果您使用Rails 2.3+這將是更好地做到這一點使用named_scope拉姆達

希望這有助於

1

你需要使用scoped_by_*方法,而不是find_by_*,如果你想返回一個ActiveRecord :: Relation對象(你可以做進一步的SQL查詢),而不是一個數組。

scoped_by_*的解釋可以在這裏找到:http://api.rubyonrails.org/classes/ActiveRecord/Base.html

這裏是你的代碼應該是什麼樣子,如果你使用scoped_by_*

projects = Project.scoped_by_id(array_of_ids) 
p = projects.find(pr.id)