[英]Rails changes postgres SELECT * to SELECT COUNT
我正在與RailsCast一起使用令牌輸入,並正在嘗試清理Postgres的查詢方法。 我發現這篇文章是使我的查詢與數據庫無關的。
我的方法:
def self.tokens(query)
t = Language.arel_table
languages = Language.where(t[:name].matches("%#{query}%"))
if languages.empty?
[{id: "<<<#{query}>>>", name: "New: \"#{query}\""}]
end
end
返回
:001 > Language.tokens('Ru')
(0.8ms) SELECT COUNT(*) FROM "languages" WHERE ("languages"."name" ILIKE '%Ru%')
但是,如果我使用return
而不是language =
,則會得到正確的查詢:
def self.tokens(query)
t = .arel_table
return Language.where(t[:name].matches("%#{query}%"))
end
:001 > Language.tokens('Ru')
Language Load (0.9ms) SELECT "languages".* FROM "languages" WHERE ("languages"."name" ILIKE '%Ru%')
這可能很明顯,但是我無法弄清楚為什么第一種方法選擇count
而不是選擇“語言”表db中的所有行。 我真的很想將該查詢的結果存儲在一個變量中。
這是因為where被盡可能地延遲解決(直到絕對需要時才解決)。 在您的情況下,在以下情況下需要它:
它進行計數的原因是通過計數確定它是否為空。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.