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 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