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