Mam taki oto problem. Do dalszych elementów strony mogę zalogować się dopiero po drugim wpisaniu prawidłowego loginu i hasła (upewniałem się, że za pierwszy razem podaje dobry).
Kod kontrolera, który obsługuje logowanie:
def create
login_user = Employee.find_by(:email=> params[:email], : password=> params[: password])
if login_user
session[:user] = login_user
redirect_to employee_time_offs_path(:employee_id => login_user.id)
else
redirect_to root_path
end
end
Za pierwszym razem wchodzi do metody create, znajduje usera ale generuje url do roota, dopiero za drugim razem przechodzi do prawidłowej strony.
Macie jaki pomysł dlaczego? Z góry dziękuje za pomoc
Devise przy prostej stronie jest ok, ale przy bardziej skomplikowanej, za dużo rzeczy trzeba ustawiać. Zakładam, że autor podał przykładowy (uproszczony) kod kontrolera, więc nie ma tutaj nic dziwnego.
Generalnie metoda find_by została dodana w rails4, jak najbardziej należy jej używać
Zgadzam się z drugim punktem, @lsol dlaczego trzymasz cały obiekt w sesji?
Co do samego problemu - skoro login_user jest znajdowany, to na pewno kod wchodzi do pierwszej opcji w warunku, więc zapewne przy redirect_to idzie do ścieżki employee_time_offs_path, i tam filtr, który sprawdza czy użytkownik jest zalogowany, stwierdza, że nie jest i robi redirect do root_path. Sprawdź co się dzieje w tym filtrze, czy session[:user] jest tam poprawne.