如何在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')
这不起作用并返回错误。
n7taea2i1#
您可以使用问号代替变量,并将这些变量作为第二个和第三个参数传递:
Rate.where('A = ? and B = ?', x, y)
你可以在任何直接的SQL查询中使用问号,但我更喜欢使用标准的AR查询语法和哈希(如@AaditiJain所提到的):
Rate.where(a: x, b: y)
vwkv1x7d2#
@AaditiJain的回答是最喜欢的方式。另一种替代方案可以使用符号而不是?,如下所示:
?
Rate.where("A = :x and B = :y", x: params[:x], y: params[:y] )
628mspwn3#
为什么不是简单的:Rate.where(a: params[:x], b: params[:y])应该没问题它将在数据库中运行如下查询:
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可用的语法,避免使用字符串文字。
3条答案
按热度按时间n7taea2i1#
您可以使用问号代替变量,并将这些变量作为第二个和第三个参数传递:
你可以在任何直接的SQL查询中使用问号,但我更喜欢使用标准的AR查询语法和哈希(如@AaditiJain所提到的):
vwkv1x7d2#
@AaditiJain的回答是最喜欢的方式。
另一种替代方案可以使用符号而不是
?
,如下所示:628mspwn3#
为什么不是简单的:
Rate.where(a: params[:x], b: params[:y])
应该没问题它将在数据库中运行如下查询:
尽可能使用Rails可用的语法,避免使用字符串文字。