NoMethodError in UsuarioController#login
You have a nil object when you didn’t expect it!
The error occurred while evaluating nil.nick
El error se que se está dando porque no recibo nada de la base de datos,
pero no se cómo filtrar que de la bd estoy recibiendo algo. No obstante
¿no deberÃa el modelo impedir que el usuario y la pwd puedan dejarse en
blanco? (en el modelo valido presence_of)
mi código es el siguiente:
def login
@titulo=“Inicio de sesion”
if request.post? and params[:usuario] and @usuario = Usuario.new(params[:usuario])
usuario = Usuario.find_by_nick_and_pwd(@usuario.nick,@usuario.pwd)
if usuario
session[:usuario_id]=usuario.id
flash[:notice] = “Usuario #{usuario.nick} autenticado!”
redirect_to :action => “index” #render :text => usuario.created_at
else @usuario.pwd = nil
flash[:notice] = “Usuario #{usuario.nick}, o contraseña no
existen!”
end
end
end
En tu ejemplo, caes en el else cuando no hay usuario, pero aun asÃ
intentas usar su nick para mostrarlo en el flash, lo cuál te provoca el
fallo. Supongo que es en ese punto, porque no pones la traza completa y
falta el número de lÃnea del error. El validates_presence_of se encarga
de
que no se cree o actualice el registro en ausencia de esos campos, pero
aquÃ, sin escrituras en base de datos, no está entrando en juego en
absoluto. Verifica que entiendes cómo va ese tema.
Pero como te digo, más vale que replantees la acción entera.
Por cierto, en breve cerraremos el puente entre Ruby Forum y la lista de
correo, espero que tu conversación no quede a medias. Revisa un mensaje
de
ayer para detalles.
¿no deberÃa el modelo impedir que el usuario y la pwd puedan dejarse en
blanco? (en el modelo valido presence_of)
Las validaciones lo único que hacen es no permitir que se guarde un
objeto en la base de datos si estas no se cumplen. En el trozo de código
que haz enviado no hay ninguna llamada a save, por lo que las
validaciones no se llegan a lanzar.
En cuanto a la autenticación te aconsejo no quedarte con tu propia
versión en producción a no ser que lo hayas probado bien y entendido
todas las implicaciones, hay varios ejemplos de implementación en:
y luego una segunda y tercera que puedes comprar (en pdf o en papel) en
Yo personalmente he comprado la tercera edición (Programming Ruby 1.9)
que aunque el nombre dice 1.9 es válido para 1.8 y deja bien claro lo
que es de 1.9 y lo que es de 1.8
Uff, esto suena a muy geek, pero en realidad no es tan complejo, está
muy bien documentado y si no lo entiendes al menos te quedas como mismo
estabas, nunca peor. A mi personalmente me ha servido de mucho.
Más código de aplicaciones hechas en ruby o en rails, en github tienes
hasta un code search.
Yo por ejemplo me he leido bastante código de los proyectos spree,
insoshi, redmine, etc.
Y por supuesto, haz bastante pruebas de lo que escribes, no te conformes
con ir y probarlo en el navegador. A mi me gusta mucho rspec más que
test:unit pero cualquiera de las dos opciones es válida.
Vaya si me he enrollao con la respuesta, espero te sirva.
Como bien habeis supuesto, sólo estoy aprendiendo a manejar básicamente
algunas cosillas. No estoy preparando montar ninguna aplicación. TAl y
como Manuel me sugerÃa inicialmente el error estaba en el else. No me di
cuenta que estaba intentando mostrar el nombre del usuario (que no
existÃa… y por tanto no se podÃa mostrar) gran fallo.