segunda-feira, 22 de março de 2010

RJS X Alert Com quebra de linha

0

Mais uma poderosa batalha a ser travada, ahauhhuauha, estou cá eu com meus botões estudando rails, e resolvo por na mensagem de alert de erro os erros que ocorreram quando o objeto foi salvo meu snipet do rjs é algo semelhante a isso (Rails 2.3.4 e JQuery)

update.rjs

  1. if flash[:error]  
  2.   page << "alert('#{flash[:error]}')"  



Quando no controller havia uma única mensagem (Erro ao atualizar dados), esse snipet funcionava muito bem, muitos vão dizer que é mais facil usar so page.alert, sim é mais facil, enfim, o código tava assim e pronto ;)

Qual a solução encontrata para mostrar os erros? Bom percorrer o array de erros e mostrar cada um em uma linha não é? Coisa facil fui lá eu

controller.rb
  1. def update  
  2.   #Preenche o objeto  
  3.   if @objeto.save  
  4.     #Não interessa  
  5.   else  
  6.    msg = "Erro ao atualizar dados \n"  
  7.    @objeto.errors.full_messages.each do |error|  
  8.     msg += "#{error.to_s}\n"  
  9.    end  
  10.    flash[:error] = msg  
  11.    respond_to  
  12. end  


Muito simples né, e adivinha que me apareceu no alert?

"Erro ao atualizar dados \n Data não pode ser vazio\n"

sim os "\n" apareceram no alert se mudar para o
aparece no meio o
, eu tava quase querendo joga pela janela o PC, eis que eu resolvo recorrer ao nosso grande oraculo e encontrei um post de um caboclo falando a solução, pois ele passou por esse mesmo problema, e se vcs olharem o post do blog foi la em 2007 :(, só fazem 3 anos ahauuhauhah, resumindo, o que deve ser feito é criar um metodo na classe helper

helper.rb
  1. def get_alert_error_message  
  2.   msg = "Erro ao atualizar dados \n"  
  3.    @objeto.errors.full_messages.each do |error|  
  4.     msg += "#{error.to_s}\n"  
  5.    end  
  6.   return msg  
  7. end  


Reparem o código é exatamente igual


update.rjs
  1. if @error  
  2.   page.alert "#{get_alert_error_message}"  
  3. end  


E acreditem, exatamente o mesmo código, funcionou da forma que eu queria :), pra quem não consegue imaginar, a variavel @error foi criada para indicar quando ocorreu um erro no RJS, para imprimir esse alerta só se ocorreu um erro.

PS: Esse post além de compartilhar essa informação, é pra eu me lembrar futuramente disso ai.

0 comentários:

 
Design by ThemeShift | Bloggerized by Lasantha - Free Blogger Templates | Best Web Hosting