我正在尝试使用导轨"其中"使用activeRecord进行查询。我的查询包含多个条件,其中一个是数组:
User.where("state = ? AND salary >= ?", ["AL", "MI", "MA"], 1000)
问题在于,当我运行它时(无论是从控制器还是从控制台),我都没有得到任何错误,但看起来像是一个空的ActiveRecord对象。如果我在数组中只有一个值,它可以正常工作。它的多个值(我知道存在),不会返回预期的值。
SELECT `users`.* FROM `users` WHERE (salary >= 1000 AND state = "AL", "MI","MA")
我可以使用哈希,但我不确定如何在这方面获得查询中的所有条件。那,我可以做到以下几点:
User.where(state: ["AL", "MI", "MA"])
这有效,但不确定如何在那里获得薪水> =条件。 谁能告诉我我做错了什么,以及如何解决它?
答案 0 :(得分:4)
我更喜欢使用Mark的解决方案,但为了让您的初步尝试有效,您必须将state = ?
更改为state IN (?)
,如下所示:
User.where("state IN (?) AND salary >= ?", ["AL", "MI", "MA"], 1000)
这将生成WHERE ... IN ('...', '...')
查询,这是传递数组时所需的查询。
使用散列的好处是Rails会自动生成正确的SQL。如果传递字符串或数组,这很重要。
答案 1 :(得分:3)
只需链接where
子句:
User.where(state: ["AL", "MI", "MA"]).where("salary >= ?", 1000)