The reason to stay away from eval is because you want to avoid evaling anything user generated. The OP is trying to make a class from an item in the params object. DANGER!! look here:
how bout eval(params[:class_name].capitalize + ".find(:first)") ?
Now anyone can try to enter all kinds of things in the params[:class_name] form field. And it will get evaled without any checking on the server. Bad!
If you can avoid eval please do so at all costs. class_Eval or instance_eval with blocks instead of strings are better. But in your example:
I understood that Send limitted the scope(object calls) of damage that can be cause by eval - and a object.send("#{params[:command]) is dangerous enough. Whereby Eval's scope isn't limited.
In my particular case the_model is instantiate by the controller action - so eval would likely be as 'safe' as send (?).
My questions was questioning what additional protection that send provides - is there any protection provided above and beyond the localization of the class executing the arbritary code?
I think my learning here is that regardless of means(send, eval, etc), that additionally checking should be done on the methods being called - limiting the scope of the methods that can be called (I've recently used acts_as_state_machine to limit sends based upon model state and other guards - this provides funnel that sends must qualify before running - and still give me the benefit of a measure of dynamism.
ala:
instance.send("#{params[:command]}") if Class.legitimate_commands.include?(params[:command])