【问题标题】:Rails using a variable on left side of where clauseRails 在 where 子句的左侧使用变量
【发布时间】:2014-12-02 20:03:08
【问题描述】:

我希望执行以下操作:

var = 'bank_id'
id = '100'

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

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

【问题讨论】:

  • 你的问题是什么?
  • 您确定该列的名称是“bank_id”吗?还是只是'id'
  • Bank 不是实际的表。它是一个以 bank_id 作为外键的表。为了便于理解,我这样说。

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


【解决方案1】:

接受哈希的地方会被映射到正确的 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。

Always coding有更详细的解释。

【讨论】:

    【解决方案2】:

    还有一个 Arel Table 方法:

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

    【讨论】:

      【解决方案3】:

      这是可能的:

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

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

      【讨论】:

      • 我完全同意@JanDintel!应该有更好的方法来解决“真正的”问题!
      • 我正在遍历模型列表并寻找匹配的主键 ID。
      • 我不知道确切的问题,但你为什么不使用关联?
      猜你喜欢
      • 2016-05-18
      • 2020-04-16
      • 1970-01-01
      • 1970-01-01
      • 2014-04-11
      • 2014-02-16
      • 2023-03-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多