Donc je travaille avec authlogic, et j'essaye de dupliquer la fonctionnalité de connexion à la page d'accueil, afin que vous puissiez vous connecter par une URL reposante ou en allant simplement à la page principale. Non, je ne sais pas si nous garderons cette fonctionnalité, mais je veux la tester quand même. Voici le message d'erreur:Rails: fonctionnalité en double entre les contrôleurs? Un humble plaidoyer
RuntimeError in Welcome#index Called id for nil, which would mistakenly be 4 -- if you really wanted the id of nil, use object_id
Le code est ci-dessous. Fondamentalement, ce qui se passe est la vue d'index (le premier extrait de code) envoie les informations du formulaire à la méthode de création du contrôleur user_sessions. À ce stade, en théorie, il devrait simplement reprendre, mais ce n'est pas le cas.
S'IL VOUS PLAÎT aider. S'il vous plaît. Je fais cela depuis environ 8 heures. J'ai vérifié Google. J'ai vérifié IRC. J'ai vérifié tous les livres que j'ai pu trouver. Vous n'avez même pas à répondre, je peux au travail grunt si vous me pointez juste dans la bonne direction.
=== EDIT EDIT EDIT ===
Sameera était assez bon pour fournir la réponse au problème. Question ouverte, mais est ce que la meilleure façon d'organiser l'application est. Est-ce que l'application de l'objet @user_sessions dans un before_filter est acceptable, ou y a-t-il une façon plus précise de le faire?
BIENVENUE # INDEX
<% form_for @user_session, :url => user_sessions_path do |f| %>
<%= f.text_field :email %><br />
<%= f.password_field :password %>
<%= submit_tag 'Login' %>
<% end %>
APPLICATION CONTRÔLEUR
class ApplicationController < ActionController::Base
helper :all # include all helpers, all the time
protect_from_forgery # See ActionController::RequestForgeryProtection for details
# Scrub sensitive parameters from your log
# filter_parameter_logging :password
helper_method :current_user_session, :current_user
before_filter :new_session_object
protected
def new_session_object
unless current_user
@user_session = UserSession.new(params[:user_session])
end
end
private
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
end<pre></code>
SESSIONS UTILISATEUR CONTRÔLEUR
class UserSessionsController < ApplicationController
def new
@user_session = UserSession.new
end
def create
@user_session = UserSession.new(params[:user_session])
if @user_session.save
flash[:notice] = "Logged in"
redirect_to root_url
else
render :controller => 'user_sessions', :action => 'new'
end
end
def destroy
@user_session = UserSession.find
@user_session.destroy
flash[:notice] = "Logged out"
redirect_to root_url
end
end
EMPILEMENT plus détaillée TRACE
1: <h1>Welcome#index</h1>
2: <p>Find me in app/views/welcome/index.html.erb</p>
3:
4: <% form_for @user_session, :url => user_sessions_path do |f| %>
5: <%= f.text_field :email %><br />
6: <%= f.password_field :password %>
7: <%= submit_tag 'Login' %>
Application Trace | Framework Trace | Full Trace
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/gems/1.8/gems/actionpac -2.3.5/lib/action_controller/record_identifier.rb:76:in `dom_id'
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/gems/1.8/gems/actionpack-2.3.5/lib/action_view/helpers/record_identification_helper.rb:16:in `dom_id'
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/gems/1.8/gems/actionpack-2.3.5/lib/action_view/helpers/form_helper.rb:293:in `apply_form_for_options!'
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/gems/1.8/gems/actionpack-2.3.5/lib/action_view/helpers/form_helper.rb:277:in `form_for'
/Users/alex/Desktop/anglic/app/views/welcome/index.html.erb:4:in `_run_erb_app47views47welcome47index46html46erb'
S'il vous plaît poster le code pour l'index Bienvenue #. Une trace de pile plus détaillée n'est peut-être pas une mauvaise idée non plus. – jdl
C'était en fait le premier extrait de code, mais je peux voir comment cela ne serait pas clair. – Alex