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