我一直想知道的关于rails的东西是能够将额外的数据传递给rails中的find_or_create方法.例如,我不能做以下事情
User.find_or_create_by_name('ceilingfish', :email => 'an_email@a.domain', :legs => true, :face => false)
Run Code Online (Sandbox Code Playgroud)
我可以
u = User.find_or_create_by_name('ceilingfish')
u.update_attributes(:email => 'an_email@a.domain', :legs => true, :face => false)
Run Code Online (Sandbox Code Playgroud)
但那更加丑陋,还需要三个查询.我想我能做到
User.find_or_create_by_name_and_email_and_face_and_legs('ceilingfish','an_email@a.domain',true, false)
Run Code Online (Sandbox Code Playgroud)
但那种意味着我知道什么样的价值观email,legs和face是.有谁知道这是否有一种非常优雅的方式?
Har*_*tty 21
试试这个:
User.find_or_create_by_name(:name=>'ceilingfish',
:email => 'an_email@a.domain', :legs => true, :face => false)
Run Code Online (Sandbox Code Playgroud)
如果有其他参数find_or_create_by_,则必须将所有参数作为哈希传递.
User.create_with(
email: 'an_email@a.domain',
legs: true, face:false
).find_or_create_by(:name=>'ceilingfish')
Run Code Online (Sandbox Code Playgroud)