Właśnie zaczynam od Devise i Rails3. Mam authenetykację i pracuję i rozumiem podstawy.Wywołaj renderowanie znaku => w górę/w częściowej części gdzie indziej w kodzie
Obecnie w moim kontrolerze głównym, który reprezentuje moją stronę główną/stronę główną, mam dwa łącza, które prowadzą do Register => sign_up i jednego, który zmienia się w zależności od logowania/wylogowania => sign_in/sign_out.
Jednak nie chcę przekierowywać mojego użytkownika na stronę logowania. Zamiast tego chcę wyświetlić mój formularz logowania na mojej stronie głównej. Oddzieliłem szablon int devise/session/new
na widok i część _form.html.erb.
A teraz moim zdaniem domu i uczynić formularz logowania, jak tak:
<% if user_signed_in? %>
Welcome: <b><%= current_user.username %> (<%= current_user.group.name %>)</b>
<%= link_to "Logout", destroy_user_session_path, :method => 'delete' %>
<% else %>
<%= render 'devise/sessions/form' %> // Rendering the partial here
<%= link_to "Login", new_user_session_path %>
<% end %>
<hr>
Jest to kod częściowej:
<%= form_for(resource, :as => resource_name, :url => session_path(resource_name)) do |f| %>
<div><%= f.label :email %><br />
<%= f.email_field :email, :autofocus => true %></div>
<div><%= f.label :password %><br />
<%= f.password_field :password %></div>
<% if devise_mapping.rememberable? -%>
<div><%= f.check_box :remember_me %> <%= f.label :remember_me %></div>
<% end -%>
<div><%= f.submit "Sign in" %></div>
<% end %>
Mój błąd jest w następujący sposób:
NameError in Home#index
Showing devise/sessions/_form.html.erb where line #1 raised:
undefined local variable or method `resource' for #<#<Class:0x614ec68>:0x6157ff8>
Extracted source (around line #1):
1: <%= form_for(resource, :as => resource_name, :url => session_path(resource_name)) do |f| %>
2: <div><%= f.label :email %><br />
3: <%= f.email_field :email, :autofocus => true %></div>
4:
Rozumiem, dlaczego wystąpił błąd. Dzieje się tak dlatego, że częściowemu temu nie nadano atrybutu zasobu. Kiedyś dump(resource)
i okazuje się, że jest to model User/przedmiot więc dodałem następujące przed nim:
<% if @user %>
<% resource = @user %>
<% end %>
I dodaje się następujące mój dom metody indeksu kontrolera:
def index
@user = User.new
end
Jednak po tym ja dostać resource_name błąd, który okazuje się po prostu być :user
i jeśli ustawię, to mam problem z powodu devise_mapping.rememberable?
, którego nie wiem, jak zapewnić.
Chcę to zrobić właściwie, więc chcę uniknąć niechlujnego i nielogicznego podejścia, które zacząłem.