Ich fange gerade mit Devise und Rails3. Ich habe die Authenetication runter und arbeite und verstehe die Grundlagen.Devise Render-Zeichen => oben/in Form Teil an anderer Stelle in Code
Ab sofort in meinem Home Controller, der meine Startseite/Startseite darstellt, habe ich zwei Links, die mit Register => sign_up verknüpft sind und eine, die sich je nach Login/Logout => sign_in/sign_out ändert.
Allerdings möchte ich nicht meinen Benutzer zur Anmeldeseite umleiten. Stattdessen möchte ich mein Login-Formular auf meiner Startseite anzeigen. Also habe ich die devise/session/new
Vorlage int in eine Ansicht und eine _form.html.erb teilweise getrennt.
Und jetzt in meinem Hause Ansicht mache ich das Login-Formular wie so:
<% 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>
Dies ist der Code des Teils ist:
<%= 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 %>
Mein Fehler ist wie folgt:
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:
Ich verstehe, warum der Fehler passiert. Das liegt daran, dass dem Partial das Ressourcenattribut nicht zugewiesen wurde. Ich benutzte dump(resource)
und es stellt sich heraus, es ist ein User-Modell/object, damit ich die folgenden Punkte, bevor er hinzugefügt:
<% if @user %>
<% resource = @user %>
<% end %>
und fügte folgendes my Home Controller Index-Methode:
def index
@user = User.new
end
jedoch nach, dass ich bekommen resource_name Fehler, der einfach :user
ist, und wenn ich das setze, dann bekomme ich ein Problem wegen devise_mapping.rememberable?
, die ich weiß nicht, wie man zur Verfügung stellt.
Ich möchte das richtig machen, also möchte ich chaotischen und unlogischen Ansatz vermeiden, den ich angefangen habe.