Sto appena iniziando con Devise e Rails3. Ho l'Authenetication giù e funziona e capisco le basi.Devise render sign => up/in form partial altrove nel codice
A partire da ora nel mio Home Controller che rappresenta la mia Home/Front Page ho due collegamenti uno che si collega a Register => sign_up e uno che cambia in base all'accesso/uscita => sign_in/sign_out.
Tuttavia, non desidero reindirizzare il mio utente alla pagina di accesso. Invece voglio mostrare il mio modulo di login sulla mia prima pagina. Quindi ho separato il modello devise/session/new
con una vista e un partial _form.html.erb.
E ora, a mio avviso a casa mi rendo form di login come così:
<% 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>
Questo è il codice del parziale:
<%= 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 %>
Il mio errore è la seguente:
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:
Capisco perché si verifica l'errore. È perché al parziale non viene assegnato l'attributo della risorsa. Ho usato dump(resource)
e si scopre che è un modello di utente/oggetto Così ho aggiunto il seguente prima:
<% if @user %>
<% resource = @user %>
<% end %>
e ha aggiunto in seguito alla mia casa metodo index del controller:
def index
@user = User.new
end
Tuttavia dopo che ottengo nome_risorsa errore che risulta essere semplicemente :user
e se lo imposto ottengo un problema a causa di devise_mapping.rememberable?
che non so come fornire.
Voglio farlo correttamente, quindi voglio evitare un approccio disordinato e disordinato che ho iniziato.