Witam serdecznie. Ponownie wróciłem do Rails, tym razem bardziej poważnie. Pisząc w ramach nauki system obsługi użytkowników natrafiłem na problem, który nie jestem pewien jak właściwie ugryźć. Formularz logowania jest w new, a samo logowanie w create:
def new
@user = User.new
end
def create
if @user = User.find_by_nickname(params[:session][:nickname])
if @user = @user.authenticate(params[:session][:password])
session[:user_id] = @user.id
redirect_to @user
end
end
if !@user
render "new"
end
end
i teraz tak: jak widać w momencie, gdy nie zostanie odnaleziony żaden użytkownik zostaje wygenerowany ponownie formularz logowania. Jednak wtedy nie mam jak wyświetlić błędu, że nie odnaleziono użytkownia (@user będzie nil, a błędy defaultowo wyświetlam dzielonym partialem: @user.errors - tutaj trafiają w końcu np. komunikaty walidacji). Stąd pytanie: jak należałoby taką informację przekazać? Najwygodniej byłoby ręczne wywołanie błędu, że nie odnaleziono użytkownika, tak, żeby spełniał warunki wyświetlania błędów z tablicy .errors. Ale po 1. nie wiem jak to zrobić. Używanie czegoś w stylu flash[] nie uśmiecha mi się, ponieważ wiąże się z tworzeniem dodatkowego kodu, który musi być obsługiwany przez ww. partial, żeby wszystko trzymało się kupy.
Jak to powinno być zrealizowane w rails-way?