如何在Rails中的`where`子句中使用变量?

tac*_*tac 1 ruby-on-rails ruby-on-rails-4

如何在where函数中使用变量?

我有一个带有两个字段A和B(都是整数)的Rate模型,这有效:

Rate.where('A = 1 and B = 2')
Run Code Online (Sandbox Code Playgroud)

如何传递我在params哈希中得到的变量?

x = params[:x]
y = params[:y]
Rate.where('A = x and B = y')
Run Code Online (Sandbox Code Playgroud)

这不起作用并返回错误.

dp7*_*dp7 6

@AaditiJain 回答是最喜欢的做法。

另一种选择是使用符号而不是?如下所示:

Rate.where("A = :x and B = :y", x: params[:x], y: params[:y] )
Run Code Online (Sandbox Code Playgroud)

  • 如果 hash 是最后一个参数,则可以省略花括号。 (3认同)

Ily*_*lya 5

您可以使用问号而不是变量,并将这些变量作为第二个和第三个参数传递:

Rate.where('A = ? and B = ?', x, y)
Run Code Online (Sandbox Code Playgroud)

您可以在任何直接SQL查询中使用问号,但我更喜欢使用带哈希的标准AR查询语法(如提到的@AaditiJain):

Rate.where(a: x, b: y)
Run Code Online (Sandbox Code Playgroud)