如何使用AR来定义具有一个或另一个属性的记录

时间:2016-06-14 20:36:46

标签: activerecord

我试着寻找已经死亡或超过50岁的树木。想象一下,trees表有两个属性,statusage

我可以写:

Tree.where('age > ? OR status = ?', 50, 'dead')

如果我想找到年龄为50或100岁的树木怎么办?

Tree.where(age: [50,100]) 是对的吗?是否有另一种方式来写这个?另外,为什么where子句在引号中?那是Arel吗?

1 个答案:

答案 0 :(得分:0)

1

Tree.where('age > ? OR status = ?', 50, 'dead')

这是一个正确的where子句,不,它不是Arel。在文档here中,您可以看到where接受多种格式之一的条件。

  • 字符串
    • Client.where("orders_count = '2'")
    • User.where(["name = ? and email = ?", "Joe", "joe@example.com"])
  • 哈希
    • User.where({ name: "Joe", email: "joe@example.com" })

在你的情况下,它实际上是一个数组,而不是“引号”。

2

  

如果我想找到年龄为50或100岁的树木怎么办?

     

Tree.where(age: [50,100])

是的,这是正确的。或者您可以编写更明确的查询:

Product.where('age IN (?)', [50, 100])