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é?