Rails在where子句的左侧使用变量

时间:2014-12-02 20:03:08

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-4

我希望做到以下几点:

var = 'bank_id'
id = '100'

Bank.where(var: id) or
Bank.where("? = ?", var, id)

银行是一个典范。 bank_id是模型的属性 它把它当作一个字符串。

3 个答案:

答案 0 :(得分:7)

接受散列函数的位置是否映射到正确的SQL WHERE。

Bank.where(var: id)

实际上是

Bank.where({:var => id})

因此,您可以构建自己的哈希键:

Bank.where({ var.to_s => id })

或更短:

Bank.where(var => id)

只是为了澄清: 差异实际上在于哈希的不同语法。基本上有两个版本。

  1. 旧的" Hash-Rocket"语法{key => value}实际上接受任何键作为键。
  2. 新的JSON样式始终使用符号als键,因此var不会被解释为变量,而是作为符号:var。
  3. Always coding有更详细的解释。

答案 1 :(得分:1)

这是可能的:

var = 'bank_id'
id = '100'

Bank.where("#{var} = ?", id)

但是你用它做什么?也许这里有一个更好的方法来解决“真正的”问题。

答案 2 :(得分:1)

还有一个 Arel Table 方法:

Bank.where(Bank.arel_table[var].eq(id))