How to pass a string literal to a ruby method? (Rails 2.3.8) I want to achieve something like the below example:
Class.find_by_"#{params[:column]}"
How to pass a string literal to a ruby method? (Rails 2.3.8) I want to achieve something like the below example:
Class.find_by_"#{params[:column]}"
You can use .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:
column_name = params[:column]
Class.find_by column_name.to_sym => value
Try:
Class.send(:"find_by_#{params[:column]}", value)