如何在where函数中使用变量?
我有一个 Rate 模型,其中包含两个字段A和B(都是整数),这样可行:
x = params[:x]
y = params[:y]
Rate.where('A = x and B = y')
如何传递我在params hash中获得的变量?
{{1}}
这不起作用并返回错误。
答案 0 :(得分:5)
您可以使用问号而不是变量,并将这些变量作为传递 第二和第三个论点:
Rate.where('A = ? and B = ?', x, y)
您可以在任何直接SQL查询中使用问号,但我更喜欢将standard AR query syntax与哈希一起使用(如提到的@AaditiJain):
Rate.where(a: x, b: y)
答案 1 :(得分:3)
为什么不简单:
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可用语法,并避免使用字符串文字。
答案 2 :(得分:2)
@AaditiJain回答是最受欢迎的做法。
另一种选择可能是使用符号而不是?
,如下所示:
Rate.where("A = :x and B = :y", {x: params[:x], y: params[:y]} )