Carlos Brando

Nome do Jogo

Rails 3: Uma nova forma de criar mensagens flash

Como a maioria deve saber, um dos grandes diferenciais do Rails vem de uma característica que também é marcante em seu criador. Ruby on Rails é um software de opinião. Atualmente DHH não é mais tão ativo no desenvolvimento do Ruby on Rails quanto no passado. Porém de tempos em tempos ele aparece com algumas inclusões polêmicas no framework.

Seu último patch é referente a inclusão das opções :alert, :notice e :flash no método redirect_to. Assim, se antes fazíamos desta maneira:

1
2
flash[:notice] = 'Post was created'
redirect_to(@post)

Agora podemos fazer assim:

1
redirect_to(@post, :notice => 'Post was created')

Esse sem dúvida é um recurso interessante e nos ajudará a diminuir a quantidade de linhas de código que escrevemos. Porém alguns desenvolvedores não gostaram desta implementação argumentando que não costumam utilizar flash[:alert] como sinalizador de problemas, mas sim flash[:error].

A resposta de DHH? “Nós estamos utilizando alert para tudo na 37signals. Isto realmente não importa. Só que exista um sinalizador para continuar e outro para parar”.

Aceitando ou não esta explicação é importante lembrar do fato de que desde o principio foram estas “convenções” que tornaram o Rails o que ele é hoje. Sendo assim, a melhor coisa a fazer é passar a adotar o padrão definido.

Outros exemplos extraídos da documentação:

1
2
3
4
5
6
7
8
9
redirect_to post_url(@post), :alert => "Watch it, mister!"

redirect_to post_url(@post), :status=> :found,
  :notice => "Pay attention to the road"

redirect_to post_url(@post), :status => 301,
  :flash => { :updated_post_id => @post.id }

redirect_to { :action=>'atom' }, :alert => "Something serious happened"

[Atualização 18/12/2009 18:20]

Uma informação importante é que existe uma boa chance deste novo recurso entrar em algum futuro release do Rails ainda na versão 2.3.x.

Além disso, também esqueci de mencionar que foram criados métodos mais convenientes para facilitar o acesso ao flash[:notice] e flash[:alert]. Podemos acessar estes recursos simplesmente assim:

1
2
3
<p class="notice"><%= notice %></p>

<p class="alert"><%= alert %></p>

Comments