Rails - 使用.where

时间:2015-06-05 16:34:28

标签: ruby-on-rails ruby postgresql

我有一个用户数据库。他们都有邮政编码。

我正在尝试使用.where来抓取所有在100天之内并且邮政编码以“NR”开头的用户。

我尝试了下面的代码,但是我得到了postgres语法错误,可能是因为.where似乎接受了特定于数据库的语法而不是直接的ruby。

users = User.where('created_at < ? and postcode[0..1] = ?', 100.days.ago, "NR")

我似乎无法找到任何可以帮助我在线的东西。我甚至尝试创建一个数组并迭代保存匹配的记录,但是rails也无法将用户分配到一个数组,所以我把它装罐了。

这里有人可以给我任何指导吗?

3 个答案:

答案 0 :(得分:2)

尝试:

users = User.where { |u| u.postcode.matches "NR%" && u.created_at < 100.days.ago }

不知道它来自哪里,所以尝试(虽然更多行):

user_tbl = User.arel_table
u = User.where(user_tbl[:postcode].matches("NR%"))
        .where(user_tbl[:created_at].lt(100.days.ago))

答案 1 :(得分:1)

写为:

users = User.where('created_at < ? AND postcode LIKE ?', 100.days.ago, "NR%")

阅读onTokenRefresh()

答案 2 :(得分:1)

编程时,您始终需要了解您正在为其编写代码的 context 。通常,您将同时使用HTML,JavaScript,Ruby和SQL,每个都有自己的语法和约定。

在这种情况下,您正在使用Postgres SQL,因此您需要的是Postgres函数来为您完成工作。这是一个字面翻译:

User.where('created_at < ? and LEFT(postcode, 2) = ?', 100.days.ago, "NR")

请务必熟悉Postgres string functions,因为其中有很多。

正如R_O_R在另一个答案中指出的那样,使用LIKE是一个选项。