Насколько я понимаю, блок будет выполнен, если ничего не найдено. Вариант использования выглядит так:
User.find_or_create_by_name("Pedro") do |u|
u.money = 0
u.country = "Mexico"
puts "User is created"
end
Если пользователь не найден, он инициализирует нового пользователя с именем "Pedro" и все эти вещи внутри блока и возвращает нового созданного пользователя. Если пользователь существует, он просто вернет этого пользователя, не выполняя блок.
Также вы можете использовать «блочный стиль» другими методами, такими как:
User.create do |u|
u.name = "Pedro"
u.money = 1000
end
Это будет так же, как User.create( :name => "Pedro", :money => 1000 )
, но выглядит немного лучше
и
User.find(19) do |u|
..
end
и т.д.