是否可以为键和值设置变量查找条件?

时间:2010-04-21 15:45:24

标签: ruby-on-rails

我正在尝试传入查找调用中的字段和值:

@employee = Employee.find(:all,
              :conditions => [ '? = ?', params[:key], params[:value].to_i)

输出

SELECT * FROM `employees` WHERE ('is_manager' = 1)

哪个没有返回结果,但是当我在mysqsl中使用相同的调用直接尝试这个而没有''around is_manager时,它可以正常工作。如何将params [:key]值转换为符号,以便生成的SQL调用如下所示:

SELECT * FROM `employees` WHERE (is_manager = 1)

谢谢, d

3 个答案:

答案 0 :(得分:3)

如果你想将一个字符串转换为符号(这是params [:key]产生的,你需要做的就是

params[:key].to_s.to_sym

2分:

  1. 提醒:符号是 不是垃圾收集。

  2. 确保您的密钥不是 数字,如果你先转换为._s 那么to_sym,你的代码会工作但是 你可能会得到一个奇怪的象征 这样:

    :"5"

答案 1 :(得分:1)

“的字符串” .to_sym

答案 2 :(得分:1)

您可以对列名使用变量替换,而不是使用绑定值:

# make sure the key passed is a valid column
if Employee.columns_hash[params[:key]]
  Employee.all :conditions => [ "#{params[:key]} = ?", params[:value]]
end

您可以通过确保传递的列名属于预先选择的集来进一步保护解决方案。:

if ["first_name", "last_name"].include? [params[:key]]
  Employee.all :conditions => [ "#{params[:key]} = ?", params[:value]]
end