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

Meg*_*ind 0 ruby ruby-on-rails ruby-on-rails-3 ruby-on-rails-4

我希望做到以下几点:

var = 'bank_id'
id = '100'

Bank.where(var: id) or
Bank.where("? = ?", var, id)
Run Code Online (Sandbox Code Playgroud)

银行是一种模式.bank_id是模型的一个属性,它将其作为字符串.

Mil*_*pke 7

哪里接受哈希女巫被映射到正确的SQL WHERE.

Bank.where(var: id)
Run Code Online (Sandbox Code Playgroud)

实际上是

Bank.where({:var => id})
Run Code Online (Sandbox Code Playgroud)

所以你可以构造自己的哈希键:

Bank.where({ var.to_s => id })
Run Code Online (Sandbox Code Playgroud)

或更短:

Bank.where(var => id)
Run Code Online (Sandbox Code Playgroud)

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

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

始终编​​码有更详细的解释.