2013-02-25 41 views
1

請原諒這個問題的noobee性質。返回found_rows的計數以及有限的活動記錄查詢結果

我有一個故事模型。每個故事都有一個存儲在其自己的數據庫列中的類別屬性。我有一個名爲範圍稱爲:in_categories,返回所有具有包含在一個給定的類別陣列類別的故事:

scope :in_categories, lambda {|categories| 
     where(:category => categories) 
    } 

我現在想要做的是限制了響應的長度,但也會返回數據庫中受訪者行的總數,忽略限制。例如,假設我將範圍更改爲:

scope :in_categories, lambda {|categories| 
     where(:category => categories).limit(20) 
    } 

但實際上有35個故事在類別數組中有一個類別。我如何找回20個活動記錄對象和一個35的計數變量?我是否需要有第二個數據庫查詢?我遇到了mysql中的FOUND_ROWS_函數,但我使用了postgresql。

回答

1

看看http://www.postgresql.org/message-id/[email protected]

沒有等價的。使用

BEGIN; 
SELECT * FROM mytable OFFSET X LIMIT Y; 
SELECT COUNT(*) AS total FROM mytable; 
END; 

(爲了確保結果的一致性,這兩個查詢應在單一 交易完成。)

沒有對因此隻手僞軌ENV

Story.transaction do 
    story.in_categories 
    story.where(:category => categories).count 
end 

更多關於活躍唱片交易的信息http://api.rubyonrails.org/classes/ActiveRecord/Transactions/ClassMethods.html

其實我們不要使用事務並簡單地按順序執行這些查詢。從來沒有問題,但當然這取決於你的項目。 OK。

+0

OK。這就說得通了。但是,如何在軌道控制器內部創建這些查詢,以便在保證一致結果的同時訪問這兩個響應? – 2013-02-25 19:49:50

+0

我真的想接受你的答案,但我最初的問題是如何在active_records的上下文中做到這一點。我不明白如何在單個AR事務中執行這兩個查詢,或者甚至可能。你能擴展嗎? – 2013-02-26 01:27:30

+0

更新了我的答案。如果您有更多問題,請隨時與我聯繫。 – Alexeyss 2013-02-26 08:18:53

相關問題