[英]String Literal in rails method name
How to pass a string literal to a ruby method? 如何将字符串文字传递给ruby方法? (Rails 2.3.8) I want to achieve something like the below example: (Rails 2.3.8)我想实现以下示例:
Class.find_by_"#{params[:column]}"
You can use .send("your_method", *your_args)
: 您可以使用.send("your_method", *your_args)
:
1.9.3p489 :027 > Object.send("try", :to_s)
=> "Object"
In your case: 在您的情况下:
Model.send("find_by_#{params[:column]}", params[:search_string])
Also, I highly recommend you to put some security checks on this: 另外,我强烈建议您对此进行一些安全检查 :
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
This will prevent from using non-existing columns, and provoke a internal error in your app. 这将防止使用不存在的列,并在应用程序中引发内部错误。
In Rails 4 - this should work: 在Rails 4中-这应该起作用:
column_name = params[:column]
Class.find_by column_name.to_sym => value
尝试:
Class.send(:"find_by_#{params[:column]}", value)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.