将额外数据传递给find_or_create
我一直想知道的关于rails的东西是能够将额外数据传递给rails中的find_or_create方法。 例如,我不能做以下事情
User.find_or_create_by_name('ceilingfish', :email => 'an_email@a.domain', :legs => true, :face => false)
我可以
u = User.find_or_create_by_name('ceilingfish') u.update_attributes(:email => 'an_email@a.domain', :legs => true, :face => false)
但那更加丑陋,还需要三个查询。 我想我能做到
User.find_or_create_by_name_and_email_and_face_and_legs('ceilingfish','an_email@a.domain',true, false)
但这意味着我知道email
, legs
和face
的价值。 有谁知道这是否有一种非常优雅的方式?
试试这个:
User.find_or_create_by_name(:name=>'ceilingfish', :email => 'an_email@a.domain', :legs => true, :face => false)
当您有find_or_create_by_
其他参数时,您必须将所有参数作为哈希传递。
Rails 4
User.create_with( email: 'an_email@a.domain', legs: true, face:false ).find_or_create_by(:name=>'ceilingfish')
使用rails 4.x.
DEPRECATION WARNING: This dynamic method is deprecated. Please use eg Post.find_or_create_by(name: 'foo') instead
用这个
User.find_or_create_by(first_name: 'Scarlett') do |user| user.last_name = 'Johansson' end