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

qij5mzcb  于 2023-06-22  发布在  Ruby
关注(0)|答案(3)|浏览(86)

如何在where函数中使用变量?
我有一个Rate模型,其中有两个字段A和B(都是整数),下面是:

Rate.where('A = 1 and B = 2')

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

x = params[:x]
y = params[:y]
Rate.where('A = x and B = y')

这不起作用并返回错误。

n7taea2i

n7taea2i1#

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

Rate.where('A = ? and B = ?', x, y)

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

Rate.where(a: x, b: y)
vwkv1x7d

vwkv1x7d2#

@AaditiJain的回答是最喜欢的方式。
另一种替代方案可以使用符号而不是?,如下所示:

Rate.where("A = :x and B = :y", x: params[:x], y: params[:y] )
628mspwn

628mspwn3#

为什么不是简单的:Rate.where(a: params[:x], b: params[:y])
应该没问题它将在数据库中运行如下查询:

SELECT rates.* FROM rates WHERE rates.a = 'param_x_value' 
  AND rates.b = 'params_y_value'

尽可能使用Rails可用的语法,避免使用字符串文字。

相关问题