我有以下情況:如何獲得ActiveRecord計數使用選擇
我有一個選擇查詢,我必須在選擇內計算一個值。當我再調用any?
或count
它導致的ActiveRecord :: StatementInvalid厚望:
ActiveRecord::StatementInvalid: SQLite3::SQLException: near "*": syntax error: SELECT COUNT(foos.*, (foos.bar+1) as calculated) FROM "foos
我設置這種在一個小的測試,看起來像這樣:
require 'test_helper'
class FooTest < ActiveSupport::TestCase
test 'any on active record relation' do
foos = Foo.select('foos.*, (foos.bar+1) as calculated')
assert(foos.any?, 'expected to work')
end
end
這似乎成爲rails的問題:https://github.com/rails/rails/issues/15138 所以我的第一個想法是使用all
加載結果,但不影響任何內容。
Btw。我正在使用Rails 4.1
任何想法如何解決此問題?
編輯:
爲什麼我想這樣做的原因是folllowing:
我有一個包含經度/緯度位置的模型。當我查詢模型時,我計算到給定位置的距離並按距離排序記錄。所以我的查詢看起來像這樣:
nearest_records = MyModel
.select("mymodels.*,
ST_Distance(mymodels.lnglat, #{user_location}) as distance")
.order(distance).limit(6)
這很好用。但現在我認爲我想知道我的列表是否包含任何記錄,所以我打電話給any?
。這就像所描述的那樣破壞了洞洞。它造成的上述錯誤爲any?
使用count。
所以,我第一次嘗試只是通過使用all
方法執行查詢,但不縫合工作。我當前的解決方法是通過調用ActiveRecordRelation上的each
觸發查詢,然後在第一個元素處中斷。
nearest_records.each { break }
但我真的不喜歡這種soloution。希望有人能幫助我。
我用Rails 4.1.0
我有計數問題。對我來說呢?似乎工作。您使用哪個版本的導軌?我正在使用4.1.8。 – Saravanan 2014-12-09 15:30:23
@Saravanan感謝你的提示。我更新了導軌到版本4.1.8,現在它工作。看來他們已經修好了嗎?問題。當你使用count時,只需提供一個參數來計算,例如:所有'Foo.select('foos。*,(foos.bar + 1)as calculated')。count(:all)'工作。 – 2014-12-11 20:49:47