1

我遇到了Rails 4 ActiveRecord中的.first查詢問題。 Rails 4中的新行爲是添加一個order id字段,以便所有db系統將輸出相同的順序。Rails:使用ActiveRecord .first查詢時忽略子句順序?

所以這...

Foo.where(bar: baz).first 

會給查詢...

select foos.* from foos order by foos.id asc limit 1 

我遇到的問題是我的選擇有兩個和領域。隨着訂單編號自動拋出查詢,我得到一個錯誤,ID字段必須出現在group by子句。錯誤是正確的,如果我想輸出是這兩個字段的總和,則不需要id字段。

這裏是不工作的例子...

baz = Foo.find(77).fooviews.select("sum(number_of_foos) as total_number_of_foos, sum(number_of_bars) as total_number_of_bars").reorder('').first 

以下是錯誤...

由於選擇是聚集表達,沒有必要爲訂購編號,但AR正在自動投入。

我發現我可以前的。首先上添加重新排序(「」)到最後,並且消除了順序按id,但是是正確的方式來解決這一問題?

謝謝

[更新]我忘了提及的是,我將一個大的Rails 3項目到Rails 4.因此,從Rails 3的輸出是一個AR對象。如果可能的話,我希望解決方案保持該格式,以便在轉換中更改代碼的數量較少。

回答

2

你將要使用take

The take method retrieves a record without any implicit ordering.

例如:

baz = Foo.find(77).fooviews.select("sum(number_of_foos) as total_number_of_foos, sum(number_of_bars) as total_number_of_bars").take 

的提交信息here表明這是舊first行爲的替代品。

+0

完美地工作。謝謝回覆。 – dsmorey