Les deux formes sont équivalentes.
Le style recommandé est d'utiliser les accolades pour une ligne de blocs et d'utiliser le "faire"-"fin" pour multi-blocs.
Edit: Austin Ziegler a souligné (dans le commentaire ci-dessous) que les deux formes ont la différence de niveaux de priorité: accolades ont une priorité plus élevée. Par conséquent, lors de l'appel d'une méthode sans parenthèse un bloc entre {} peut se lier à la dernière argument au lieu de la méthode appelante.
L'exemple suivant a été proposé par Austin:
def foo
yield
end
puts foo { "hello" }
puts foo do
"hello"
end
Le premier "met" imprime "bonjour": foo est appelé le retour "bonjour" qui est l'argument de vente.
La deuxième bails avec une erreur:
in `foo': no block given
Puisque dans ce cas la ne de fin de bloc se lie à la met méthode.
Merci encore à Austin pour dégager cette place.