Witam, w głównym layoucie całej aplikacji, w navbarze mam coś takiego:
#application.html.erb
<% if logged_in? %>
<%=h current_user.login %>, witamy!
AKCJE UŻYTKOWNIKA
<% else %>
<% form_for @user_session do |f| %>
<fieldset>
FORMULARZ LOGOWANIA
</fieldset>
<% end %>
<% end %>
Jak sobie dodaje nowy kontroler to za każdym razem gdy wykonuję jakąś akcję dostaje coś takiego:
Showing app/views/layouts/application.html.erb where line #35 raised:
Called id for nil, which would mistakenly be 4 -- if you really wanted the id of nil, use object_id
Linia 35 dotyczy tego: <% form_for @user_session do |f| %>
Jeżeli do wywoływanej akcji dopiszę sobie linijkę:
def jakas_akcja
@user_session = UserSession.new
end
To wtedy nie mam błędu, jednak nie jest to na pewno najlepsze rozwiązanie. Jak można się pozbyć tego błędu? Może coś zmienić z tym navbarem gdzie mam formularz logowania?
No bo musisz ten user_session mieć wszędzie, czyli najlepiej mieć to w ApplicationController, coś takiego tam by się przydało
[code=ruby]
def current_user_session
return @current_user_session if defined?(@current_user_session) @current_user_session = UserSession.find
end
def current_user
return @current_user if defined?(@current_user) @current_user = current_user_session && current_user_session.record
end[/code]
Ale poza ta tym robisz coś źle, pooglądaj sobie screencasty od Rayan o Autoryzacji i autentykacji
Pewnie jakiegoś authlogic używasz dodaj do tego cancan i będzie git bez tej ręcznej mordęgi, a przy bardziej skomplikowanych rzeczach na pewno odczujesz pozytywne efekty
Te wszystkie metody w application_controller mam ponieważ korzystałem z tych railscastów. Problem się pojawia w sytuacji gdy chcę mięć ten formularz logowania dostępny w ogólnym layoucie. Stąd moje pytanie jak to jakoś zgrabnie dodać. Próbowałem we wcześniej wspomnianym application_controller wpisać po prostu @user_session = UserSession.new, ale kończy się to błędem