ruby - 当参数采用数组时,Rails 使用 ActiveRecord "where"

标签 ruby activerecord ruby-on-rails-3.2

我正在尝试通过 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/

相关文章:

ruby-on-rails - Rails 3.2.8 中 Twitter Bootstrap 和 jQuery.ui 冲突

javascript - 编辑表格上的值后如何更新字段(使用 jquery 或 javascript)

ruby - 使用 Apache 托管 Ruby gem

ruby-on-rails - 如何在 Arel 中对连接列进行类型转换

php - 我如何告诉 CodeIgniter ActiveRecord 不要转义我的插入和更新查询?

mysql - sql(mysql)中哪些用户与旧用户相关的列表

ruby-on-rails - 如何在 Rails 的 ERB 文件中检查开发或生产?

ruby - ruby 中的条件链接

ruby - 使用 'require' 和符号链接(symbolic link)时的路径问题

ruby - sqlite3-ruby 在 Ubuntu 上安装错误