我正在与RailsCast一起处理令牌输入,并尝试清理Postgres的查询方法。我发现this post使我的查询数据库不可知。
我的方法:
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
而不是“languages”表db中的所有行。我真的想把查询结果存储在一个变量中。 最佳答案
这是因为哪里被尽可能地懒洋洋地解决了(除非它是绝对需要的)。在你的情况下,当你:
显式返回
空头支票?
它进行计数的原因是通过计数来确定它是否为空。