Something I've always wondered about rails is the ability to pass extra data to find_or_create methods in rails. For example, I can't do the following
User.find_or_create_by_name('ceilingfish', :email => '[email protected]', :legs => true, :face => false)
I could do
u = User.find_or_create_by_name('ceilingfish')
u.update_attributes(:email => '[email protected]', :legs => true, :face => false)
But that's uglier, and also requires three queries. I suppose I could do
User.find_or_create_by_name_and_email_and_face_and_legs('ceilingfish','[email protected]',true, false)
But that kind of implies that I know what the values of email
, legs
and face
are. Does anyone know if there's a really elegant way of doing this?
Try this:
User.find_or_create_by_name(:name=>'ceilingfish',
:email => '[email protected]', :legs => true, :face => false)
When you have additional parameters to find_or_create_by_
, you have to pass all the parameters as a hash.
User.create_with(
email: '[email protected]',
legs: true, face:false
).find_or_create_by(:name=>'ceilingfish')
With rails 4.x
DEPRECATION WARNING: This dynamic method is deprecated. Please use e.g. Post.find_or_create_by(name: 'foo') instead
Use this
User.find_or_create_by(first_name: 'Scarlett') do |user|
user.last_name = 'Johansson'
end
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With