On Sun, Apr 10, 2011 at 10:43 AM, Frederick Cheung < [email protected]> wrote:
> > > On Apr 10, 4:38 pm, David Kahn <[email protected]> wrote: > > On Sun, Apr 10, 2011 at 9:51 AM, Matt Jones <[email protected]> wrote: > > > > > On Apr 9, 11:37 pm, David Kahn <[email protected]> wrote: > > > > Is there a different way to do such an eval? In actuality what I am > doing > > > > with this phrase is to assign hash params to the attributes of a > class: > > > > > > eval("background_process_status.#{key.to_s}='#{value}'") > > > > > I'd *highly* recommend that you not do this. Using send is not only > > > more efficient, it's far safer - for instance, what happens if > > > somebody sends your code a value like > > > > > '; `rm -rf *`;' > > > > > This will be syntactically valid, and will make quite a mess... > > > > Thanks all... yeah, I will use send, I forgot about that and you are > right, > > it gets yucky very fast when things like single quotes and who knows what > > else get added. > > For what it's worth I suspect that the problem was that you needed to > escape the \ in your substitution ( ie "\\'") > I just tried this and thought for sure you were right. But no! So let me step back, really I fail to understand why if I have a param[key] value of "Addy's" that Ruby can not handle it on its own, and much less escaped by ("\'" or "\\'"): account.name = "Addy's" BackgroundProcessStatus.update(:status => "Processing Account name: #{ account.name}") class BackgroundProcessStatus < ActiveRecord::Base def self.update(params) background_process_status = BackgroundProcessStatus.first || BackgroundProcessStatus.new params.keys.each do |key| background_process_status.send("#{key.to_s}=", params[key]) end end end The delayed_job output is: SyntaxError: (eval):2: syntax error, unexpected tIDENTIFIER, expecting $end ...Processing Account name: Addy's Harbor Dodge' ^ - 0 failed attempts I dont know if this has to do with it running as a job but if so in the dark as to why that would be as this seems to be pretty basic Ruby. > > Fred > > > > Also, on this answer: eval("assigned_string=#{name}") , no it does not > work, > > this is what I had originally but if you output the internal string it > looks > > like "assigned_string=david" which of course errors out unless what is in > > 'name' is a non string type. > > > > > > > > > > > > > --Matt Jones > > > > > -- > > > You received this message because you are subscribed to the Google > Groups > > > "Ruby on Rails: Talk" group. > > > To post to this group, send email to [email protected] > . > > > To unsubscribe from this group, send email to > > > [email protected]. > > > For more options, visit this group at > > >http://groups.google.com/group/rubyonrails-talk?hl=en. > > -- > You received this message because you are subscribed to the Google Groups > "Ruby on Rails: Talk" group. > To post to this group, send email to [email protected]. > To unsubscribe from this group, send email to > [email protected]. > For more options, visit this group at > http://groups.google.com/group/rubyonrails-talk?hl=en. > > -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.

