【问题标题】:Rails - Building Conditions Array for Prepared StatementRails - 为准备好的语句构建条件数组
【发布时间】:2011-06-20 20:56:23
【问题描述】:

我正在尝试构建一个条件数组以在准备好的语句中使用:

Cars.find(:all, :conditions=>["color = ? AND doors = ? AND type = ?", "black", "4", "sedan"])

我已尝试执行以下操作,但收到“ActiveRecord::PreparedStatementInvalid(绑定变量数量错误(2 个为 4)”的错误:

conditions = []
conditions += ["color = ?", "black"]
conditions += ["doors = ?", "4"]
conditions += ["type = ?", "sedan"]

Cars.find(:all, :conditions=>conditions)

为准备好的语句构建条件的正确方法是什么?

【问题讨论】:

  • 这是什么版本的 Rails?

标签: ruby-on-rails


【解决方案1】:

问题是您构建了一个错误的查询,因为您在整个语句中一直将参数传递给问号。

您的查询结果如下所示:

 => ["color = ?", "black", "doors = ?", "4", "type = ?", "sedan"] 

为了实现你想要的数组,你必须做这样的事情。

conditions = []
conditions += ["color = ?", "black"]
array = ["doors = ?", "4"]
conditions[0].concat(" AND ")
conditions[0].concat(array[0])
conditions << array[1]

如果您重复最后的步骤,您应该会得到所需的结果。

【讨论】:

  • 曼迪,感谢您的回复。这种方法似乎有效。但它似乎有点混乱。如果没有其他方法,我可能会默认使用此方法。再次感谢。
【解决方案2】:

您可能会发现使用哈希更容易做到这一点:

conditions = {}
conditions[:color] = "black"
conditions[:doors] = 4
conditions[:type] = "sedan"

Cars.find(:all, :conditions=>conditions)

【讨论】:

  • zetetic,在需要使用 LIKE 或 regexp 进行查询的情况下,我将如何使用哈希?
  • 然后你被困在传递一个字符串或数组中,如 Mandi 的回答所示。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-11
  • 1970-01-01
相关资源
最近更新 更多