July 11, 2011
Find or create by …

Digamos que queremos procurar um usuário pelo seu e-mail e exibir seu nome, mas se esse usuário não existir, teremos que criá-lo.

Uma maneira de fazer isso seria:

@user = User.find_by_email("user@email.com")
unless @user
  @user User.create(:email => "user@email.com", :name => "User")
end
puts @user.name

Porém, podemos melhorar usando o find_or_create_by_email:

@user = User.find_or_create_by_email("user@email.com", :name => "User")
  puts @user.name

Podemos adicionar também mais condições neste método apenas incrementando com and, por exemplo:

@user = User.find_or_create_by_email_and_name("user@email.com", "User", :description => "Olá")
  puts @user.name

Legal né?


Blog comments powered by Disqus