Rails根据需求查询条件

时间:2017-09-26 08:50:47

标签: mysql ruby-on-rails

我有一个要求,我需要根据需求执行查询。在我的代码中,我有一个名为order_type的参数。如果order_type是" current_day",我需要触发查询

[order_date = ? and user_id = ? and country_id = ?, @order_date, @user_id, @country_id]

如果order_type是"过去"我需要执行

[order_date < ? and user_id = ? and country_id = ?, @order_date, @user_id, @country_id]

我不想在这里添加if else,因为我有几个基于order_type字段的过滤查询。我添加了一个变量@comparator并将其设置为&#39;&lt;&#39;如果order_type是旧的&#39; =&#39;当order_type是current时,并且像这样进行查询。

[order_date "+@comparator+" ? and user_id = ? and country_id = ?, @order_date, @user_id, @country_id]

但是,这会成为SQL注入的威胁。请让我知道处理这个问题的最佳方法是什么。

提前致谢。

1 个答案:

答案 0 :(得分:1)

@comparator将保留其中一个值['&gt;','&lt;','='等]

所以写方法会检查比较器应该是你在数组中提到的值之一。如果方法返回true,则继续查询或者拒绝它。

像这样。

def comparator(comparator)
  arr_set = ['>', '=']
  arr_set.include?(comparator)
end


if comparator(@comparator)
   execute_query
else
   # throw error or do somthing
end

这将阻止sql注入