我正在使用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
而不是'语言&#39;中的所有行。表db。我真的想将该查询的结果存储在变量中。
答案 0 :(得分:1)
这是因为它尽可能懒得解决(直到它绝对需要)。在你的情况下,你需要它:
它进行计数的原因是通过计数确定它是否为空。