Authlogic + Rails3 - undefined method `Login' for nil:NilClass

Im new to Rails, and decided to start of with Rails3. After a lot of
searching ive managed to get a little bit of Authlogic working. I'm able
to register a user, login & logout.

Now, I would like to add more features, get more of authlogic working.
I'm using Railscast EP 160 as my reference.

Portions of the code found on the tutorial throw errors: Eg:

<!-- layouts/_topbar.erb -->
<%= link_to "Login", login_path %>

and I get the following error message:

undefined local variable or method `login_path' for
#<#<Class:0x0000000311e8f8>:0x0000000310af38>

To overcome this, ive just used a string. i.e. <%= link_to "Login",
"/UserSessions/new" %>

Now it seems like i've reached an impasse. When i try to output the
current user with:

<%= @user.Login %>

I get an error that im unable to circumvent. Can you please help me?
Thanks :slight_smile: Please find below the error message, and some of the code.

undefined method `Login' for nil:NilClass

Full Trace Reads [truncated]

activesupport (3.0.0) lib/active_support/whiny_nil.rb:48:in
`method_missing'
app/views/layouts/_topbar.erb:16:in
`_app_views_layouts__topbar_erb__4536428193941102933_40950340__3781575178692065315'
actionpack (3.0.0) lib/action_view/template.rb:135:in `block in render'
activesupport (3.0.0) lib/active_support/notifications.rb:54:in
`instrument'
actionpack (3.0.0) lib/action_view/template.rb:127:in `render'
actionpack (3.0.0) lib/action_view/render/partials.rb:294:in
`render_partial'
actionpack (3.0.0) lib/action_view/render/partials.rb:223:in `block in
render'
activesupport (3.0.0) lib/active_support/notifications.rb:52:in `block
in instrument'
activesupport (3.0.0)
lib/active_support/notifications/instrumenter.rb:21:in `instrument'

Request Parameters:None

My gemfile reads:

gem "authlogic", :git => "git://github.com/odorcicd/authlogic.git",
:branch => "rails3"

config/routes.rb:

  resources :users
  resources :user_sessions
  resources :ibe
  match ':controller(/:action(/:id(.:format)))'

controllers/application_controller.rb: [the part that gets the current
user.. also taken from online examples]

  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

models/user_session.rb:

class UserSession < Authlogic::Session::Base
include ActiveModel::Conversion
  def persisted?
    false
  end
  def to_key
    new_record? ? nil : [ self.send(self.class.primary_key) ]
  end
end

models/user.rb:

class User < ActiveRecord::Base
  acts_as_authentic
end

controllers/users_controller.rb:

class UsersController < ApplicationController
  before_filter :require_no_user, :only => [:new, :create]
  before_filter :require_user, :only => [:show, :edit, :update]

  def new
    @user = User.new
  end

  def create
    @user = User.new(params[:user])
    if @user.save
      flash[:notice] = "Account registered!"
      redirect_back_or_default account_url
    else
      render :action => :new
    end
  end

  def show
    @user = @current_user

  end

  def edit
    @user = @current_user

  end

  def update
    @user = @current_user # makes our views "cleaner" and more
consistent
    if @user.update_attributes(params[:user])
      flash[:notice] = "Account updated!"
      redirect_to account_url
    else
      render :action => :edit

Im new to Rails, and decided to start of with Rails3. After a lot of
searching ive managed to get a little bit of Authlogic working. I'm able
to register a user, login & logout.

Now, I would like to add more features, get more of authlogic working.
I'm using Railscast EP 160 as my reference.

Portions of the code found on the tutorial throw errors: Eg:

<!-- layouts/_topbar.erb -->
<%= link_to "Login", login_path %>

and I get the following error message:

undefined local variable or method `login_path' for
#<#<Class:0x0000000311e8f8>:0x0000000310af38>

You have something missing or wrong in routes.rb. I am not into Rails
3 routing yet so not sure what. Have a look at the Rails Guide on
routing at http://guides.rubyonrails.org/

To overcome this, ive just used a string. i.e. <%= link_to "Login",
"/UserSessions/new" %>

Now it seems like i've reached an impasse. When i try to output the
current user with:

<%= @user.Login %>

I get an error that im unable to circumvent. Can you please help me?
Thanks :slight_smile: Please find below the error message, and some of the code.

undefined method `Login' for nil:NilClass

The error is saying that you have tried to call Login on a nil object
(of type NilClass, which is what nil is). The problem is therefore
that @user is nil. Either you have forgotten to set it up or the code
setting it has returned nil.

Have you looked at the Rails Guide on debugging? Using ruby-debug you
can break into your code and examine variables.

Colin

you might want to take a look at devise, its rails 3 friendly and easier to get going with, from what i read it's suppose to be much better

afik authlogic is not rails 3 ready? i had some early issues with a authlogic walk-through tutorial and abandoned it for devise

You have something missing or wrong in routes.rb. I am not into Rails
3 routing yet so not sure what. Have a look at the Rails Guide on
routing at http://guides.rubyonrails.org/

Thanks Colin! Yes, I did a bit of searching online, after you suggested
I take a look at routes.rb. It seems that I do have a problem with the
routing part, sadly, i couldnt find a fix for the issue.

I'm trying out Devise now, per Rajinder's suggestion.

Thanks again Colin & Rajinder :slight_smile:

Im new to Rails, and decided to start of with Rails3. After a lot of
searching ive managed to get a little bit of Authlogic working. I'm able
to register a user, login& logout.

you might want to take a look at devise, its rails 3 friendly and easier to get going with, from what i read it's suppose to be much better

afik authlogic is not rails 3 ready? i had some early issues with a authlogic walk-through tutorial and abandoned it for devise

I just set it up with Rails 3.0.1. There's a depreciation warning about save(false) vs save(:validate => false) but otherwise it seems to be working without having to do anything special.

The generator isn't available, but it's easy to create the user sessions class manually.

Haven't used it much, but no big explosions yet :slight_smile:

-philip