我正在尝试通过 activeRecord 使用 rails“where”查询。我的查询包含多个条件,其中一个是数组:
User.where("state = ? AND salary >= ?", ["AL", "MI", "MA"], 1000)
问题是,当我运行它时(无论是从 Controller 还是从控制台),我都没有收到任何错误,但看起来像是一个空的 ActiveRecord 对象。如果我在数组中只有一个值,它工作正常。它的多个值(我知道存在)不返回预期值。
SELECT `users`.* FROM `users` WHERE (salary >= 1000 AND state = "AL", "MI","MA")
我可以改用散列,但我不确定如何在这方面获取查询中的所有条件。那,我可以做以下事情:
User.where(state: ["AL", "MI", "MA"])
这行得通,但不确定如何在其中设置 salary >= 条件。 谁能告诉我我做错了什么,以及如何解决?
最佳答案
我更愿意使用 Mark 的解决方案,但要使您的初始尝试奏效,您必须将 state = ?
更改为 state IN (?)
,如下所示:
User.where("state IN (?) AND salary >= ?", ["AL", "MI", "MA"], 1000)
这将生成一个 WHERE ... IN ('...', '...')
查询,这是传递数组时所需要的。
使用散列的优点是 Rails 会自动生成正确的 SQL。传递字符串还是数组很重要。
关于ruby - 当参数采用数组时,Rails 使用 ActiveRecord "where",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25437524/