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:
flash[:notice] = 'Post was created'
redirect_to(@post)
Agora podemos fazer assim:
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:
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:
eu ainda acho flash[:error] relevante para informar erros
Eu curti essa atualização, só preciso ver o html gerado para poder criar classes no css que já deixem o visual elegante.
Agora falando em flash messages uma coisa que já vi acontecer com frequência é mensagens aparecem em outros lugares da app por ter “escapado” de outra tela.
Como podemos resolver isso de forma simples? Abs.
Juarez,
O flash[:notice] mantém o seu status mesmo quando há um redirecionamento, que deve ser o seu caso. Se quiser evitar isto deve usar flash.now[:notice].
Quanto ao css, esta nova sintaxe não interfere em nada. Já que a finalidade é apenas armazenar o valor e não exibi-lo.
Bacana Carlos… Assim fica fácil para criar a sintaxe html que desejarmos. ;)
Eu tinha visto o Daniel Lopes falando sobreo flash.now, todos deveriam utilizar ele. heheheh =)