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


if flash[:error]
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

def update
#Preenche o objeto
if @objeto.save
#Não interessa
else
msg = "Erro ao atualizar dados \n"
@objeto.errors.full_messages.each do |error|
msg += "#{error.to_s}\n"
end
flash[:error] = msg
respond_to
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

def get_alert_error_message
msg = "Erro ao atualizar dados \n"
@objeto.errors.full_messages.each do |error|
msg += "#{error.to_s}\n"
end
return msg
end


Reparem o código é exatamente igual


update.rjs

if @error
page.alert "#{get_alert_error_message}"
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