2014-06-08 90 views
0

我想對前10條記錄執行查詢。Rails更改查詢執行順序

所以,從Rails的控制檯I型:

Log.all.limit(10).where({"username"=>"peeyush"}).explain 

這給:

Log Load (0.8ms) SELECT "logs".* FROM "logs" WHERE "logs"."username" = 'peeyush' LIMIT 10 

顯然,LIMIT 10後發生的。

我嘗試運行:

Log.all.first(10).where({"username"=>"peeyush"}).explain 

但是,這給出了一個錯誤:

NoMethodError: undefined method `where' for #<Array:0x0000000539acd8> 

應如何查詢被執行?

+1

後'where'條件,你應該給'第一(10)' – Pavan

+0

,不能正常工作了!它提供了前10個日誌的數組,其中用戶名是peeyush。 – Peeyush

+0

正如查詢站,這是輸出結果的權利。 – Pavan

回答

2

如果我正確理解你,你想檢索第10行,然後通過用戶名篩選這10條記錄?

在紅寶石濾波

all.first(10).find_all {|i| i.username == "peeyush" } 

過濾數據庫

all.where(:id => all.first(10).map {|x| x.id}, :username => "peeyush") 
+0

這將工作,但我想在數據庫中執行過濾器,而不是在Ruby代碼中執行。一個(不太好)的方法可能是在條件id和限制id的前10個值上應用一個,但我正在尋找更好的方法。 – Peeyush

+1

@Peeyush剛剛看到你的更新評論,不幸的是我的答案是一樣的,但我沒有看到另一種方式做它 – FuzzyTree