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

时间:2016-12-21 04:52:03

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

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

我有一个 Rate 模型,其中包含两个字段A和B(都是整数),这样可行:

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

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

{{1}}

这不起作用并返回错误。

3 个答案:

答案 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]} )