rails方法名称中的String Literal

时间:2014-05-08 20:56:41

标签: ruby-on-rails ruby string parameters escaping

如何将字符串文字传递给ruby方法? (Rails 2.3.8) 我想实现类似下面的例子:

 Class.find_by_"#{params[:column]}"

3 个答案:

答案 0 :(得分:1)

您可以使用.send("your_method", *your_args)

1.9.3p489 :027 > Object.send("try", :to_s)
 => "Object" 

在您的情况下:

Model.send("find_by_#{params[:column]}", params[:search_string])

此外,我强烈建议您对此进行一些安全检查:

if Model.column_names.include?(params[:column].to_s)
  Model.send("find_by_#{params[:column]}", params[:search_string])
else
  # usually return nil or empty scope like `Model.where('FALSE')`
end

这样可以防止使用不存在的列,并在您的应用中引发内部错误。

答案 1 :(得分:1)

在Rails 4中 - 这应该有效:

column_name = params[:column]
Class.find_by column_name.to_sym => value

答案 2 :(得分:1)

尝试:

Class.send(:"find_by_#{params[:column]}", value)