Is this not intended?

My understanding was always that if a record is found, no changes are  
made, otherwise we create one with the prams passed in and set it up  
with the block too.

i.e.
        User.find_or_create_by_name(name){|new_user| new_user.password =  
'1234' }
should be equivalent to:
        User.find_by_name(name) || User.create!{ |new_user| new_user.password  
= '1234' }

Perhaps a documentation patch would be more appropriate?

-Tom

On 24 Oct 2008, at 17:32, Ken Miller wrote:

>
>
> when you use a find_or_create_ automatic method with an initializer
> block, the block isn't called on the first run, but is called on
> subsequent runs:
>
> u = User.find_or_create_by_name('bob') { |new_user| new_user.password
> = '1234' }
> u.name
>>> "bob"
> u.password
>>> nil
>
> u2 = User.find_or_create_by_name('billy') { |new_user|
> new_user.password = '1234' }
> u2.name
>>> 'billy'
> u2.password
>>> '1234'
>
> This appears to have been around for a while.
>
> Bug filed (with patch) here:
>
> http://rails.lighthouseapp.com/projects/8994/tickets/1224-find_or_create_by_-methods-do-not-execute-their-block-on-first-call#ticket-1224-1
>
> >


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Core" 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-core?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to