2011-08-21 21 views
7

Estoy escribiendo una aplicación simple que toma la entrada estándar del usuario. En cuanto a la entrada de correo electrónico, tengo que verificar si está en un formato estándar de correo electrónico y luego tener que enumerar los problemas como éste cuando una nueva instancia va a ser guardada:Mostrar el mensaje de error con Sinatra

u = User.new 
u.email = params[:email] 
u.save 
if u.save 
    redirect '/' 
else 
    u.errors.each do |e| 
    puts e 
    end 
end 

Yo sé que si se corregir debería volver a la página de inicio. Si está mal, quiero que regrese también a la página de inicio, pero quiero que devuelva un valor de error (para que pueda aparecer una ventana emergente o algo en la pantalla que indique al usuario que el formato del correo electrónico era incorrecto).) Cuál sería la mejor forma de hacer esto?

Respuesta

11

Puede utilizar el 'sinatra-flash' joya para mostrar todo tipo de errores/avisos etc.

u = User.new 
u.email = params[:email] 
u.save 
if u.save 
    redirect '/' 
else 
    flash[:error] = "Format of the email was wrong." 
    redirect '/' 
end 

Luego hay que decir dónde desea que el flash: para que se muestre [error]. Normalmente coloco esto en el archivo layout.haml o (erb) justo arriba de donde cedo en el contenido.

layout.haml:

- if flash[:error] 
    %p 
    = flash[:error] 

También, asegúrese de incluir la gema y activar las sesiones

require 'sinatra' 
require 'sinatra/flash' 

enable :sessions 

También puede probar el 'rack-flash' joya. Hay un tutorial para usarlo en http://ididitmyway.heroku.com/past/2011/3/15/rack_flash_/

2

Puede ahorrar un viaje potencialmente costoso al hacerlo en Javascript. La forma en que lo veo, una validación simple como esta es una función del cliente, manejada por algún código adjunto a un evento onBlur, no algo que necesito verificar de mi lado (excepto por sanitización, obviamente).

Para responder directamente a su pregunta, he utilizado variables de instancia regulares para almacenar una "matriz de errores" en @errors. Los errores específicos del formulario o los errores que se deben mostrar en un lugar determinado de la página, en lugar de en la parte superior, se almacenan en @form_errors o algo similar. Luego, la plantilla verifica si hay errores y los representa en consecuencia.

Cuestiones relacionadas