【问题标题】:Rails ActiveRecord Multiple WHERE StatementsRails ActiveRecord 多个 WHERE 语句
【发布时间】:2013-01-29 21:31:37
【问题描述】:

我有一个包含一些条件的数组,比如: ages = [1, 4, 10].

我正在尝试构建一个查询,它将返回数组中的年龄。数组可以是任意长度。所以像:

Person.where("age == :ages", {:ages => ages})

现在这显然不起作用,因为:ages 将是一个数组,当根据上面的相等语句时,它需要一个字符串。

我正试图让它根据ages 数组实现以下目标:WHERE age = 1 AND age = 4 AND age = 10

所有在线示例都讨论了当它们是单独的变量时如何使用多个 where 条件,在这种情况下很简单:Person.where("condition1 = :first AND condition2 = :second....)。我的数组中有未知数量的项目,我想用它们过滤我的所有查询结果。

【问题讨论】:

  • 如果适合您的问题,您应该接受其中一个答案

标签: sql ruby-on-rails ruby rails-activerecord


【解决方案1】:

ActiveRecord 和 where 语句已经支持:

ages = [1, 5, 12]
Person.where(age: ages)
# This will generates a query like:
# SELECT * FROM persons WHERE age IN(1, 5 ,12)

这种查询方式也比“硬编码”条件(将字符串传递给 where 语句)更好。通过使用 Hash 参数,您可以让 ActiveRecord 处理所有 DB-Query 转换工作。

【讨论】:

  • 我以Person.where(age => ages) 的身份进行操作,这显然是不正确的。你能解释一下冒号的语法吗?请问where 的哈希形式是什么意思?
  • 冒号是 Ruby 1.9 哈希的可选语法。 { :age => ages }{ age: ages } 在功能上是相同的。
  • 除非您不能在新的 Ruby 1.9 哈希语法中分配字符串:{ 'foo' => 'bar' } 有效,而 { 'foo': 'bar' } 无效。
【解决方案2】:

我认为你正在寻找一个 IN 查询,因为 age 不能 both 1410 一些单一的列整数值。

Person.where(age: ages)

【讨论】:

  • 这里无事可做,但有人在 StackOverflow 上窃取了您的个人资料图片!
猜你喜欢
  • 2015-10-07
  • 1970-01-01
  • 1970-01-01
  • 2011-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-11
  • 1970-01-01
相关资源
最近更新 更多