【发布时间】:2014-05-08 20:56:40
【问题描述】:
如何将字符串文字传递给 ruby 方法? (导轨 2.3.8) 我想实现如下示例:
Class.find_by_"#{params[:column]}"
【问题讨论】:
标签: ruby-on-rails ruby string parameters escaping
如何将字符串文字传递给 ruby 方法? (导轨 2.3.8) 我想实现如下示例:
Class.find_by_"#{params[:column]}"
【问题讨论】:
标签: ruby-on-rails ruby string parameters escaping
试试:
Class.send(:"find_by_#{params[:column]}", value)
【讨论】:
params[:column]改成字符串然后改成符号?
send,因此我将其转换为符号。
你可以使用.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
这将阻止使用不存在的列,并在您的应用中引发内部错误。
【讨论】:
在 Rails 4 中 - 这应该可以:
column_name = params[:column]
Class.find_by column_name.to_sym => value
【讨论】:
column_name改成符号,然后又改回字符串?