Trying to add authlogic in a simple project but get the error;
Showing app/views/layouts/application.html.erb where line #33 raised:
undefined method `underscore’ for nil:NilClass
Extracted source (around line #33):
30:
class ApplicationController < ActionController::Base
protect_from_forgery
filter_parameter_logging :password, :password_confirmation
helper_method :current_user
private
def current_user_session
return @current_user_session if defined?(@current_user_session) @current_user_session = Authentication.find
end
def current_user
return @current_user if defined?(@current_user)
@current_user = current_user_session &&
current_user_session.user
end
authentication model
class Authentication < Authlogic::Session::Base
authenticate_with User
end
user model
class User < ActiveRecord::Base
acts_as_authentic do |c|
c.session_class = Authentication
c.login_field = :login
c.ignore_blank_passwords = false
end
end
The problem is in ApplicationController @current_user_session = Authentication.find
Authentication is not active? I have config.gem “authlogic” in
environment.rb file.
Unfortunately the problem does not appear to be a routes problem but a
not initialised authlogic problem. By changing the App.Controller
methods I have now moved the problem to the create procedure after
logging on. I managed to create a user from the console and Authlogic
filled in all the special fields. But logging on and calling the
create session (call Authentication) causes the same error
undefined method `underscore’ for nil:NilClass
which occurs when calling @authentication.save.
def create @authentication = Authentication.new(params[:authentication])
if @authentication.save
flash[:notice] = “Login successful!”
redirect_to root_url
else
render :action => :new
end
end
My App.Controller now has the session/user checking methods and cause
no problems. (so far)
private
def current_user
return @current_user if defined?(@current_user) @current_user = current_user_session && current_user_session.user
end
def current_user_session
return @current_user_session if defined?(@current_user_session)
if defined?(Authentication.Find) then
@current_user_session = Authentication.find
else
@current_user_session=nil
end
end
I am using rails 2.3.8 and Authlogic 2.1.6, and I like to try and keep
to one word descriptions of models and controls so Authentication
instead of UserSession.
I had the same issue with undefined method `underscore’, and my only
solution was recreating my app from scratch, using this authlogic/rails3
template: