On Sun, Apr 10, 2011 at 11:06 AM, David Kahn <[email protected]>wrote:

>
>
> 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 "\\'"):
>

I found the problem --- seems that the delayed_job process must be restarted
if code is updated. I had updated the code but the old code was seemingly
being executed.


>
> 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.

Reply via email to