AuthLogic UserSessions Controller返回Nil

我已经设置了一个新的Rails应用程序并使用Authlogic进行身份validation。

我很高兴CRUD用户,但用户会话似乎有问题。

错误信息:

undefined method `create' for nil:NilClass app/controllers/user_sessions_controller.rb:9:in `create' 

应用程序/模型/ user.rb

 class User < ActiveRecord::Base acts_as_authentic end 

应用程序/控制器/ user_sessions_controller.rb

 class UserSession < Authlogic::Session::Base end 

应用程序/模型/ user_session.rb

 class UserSessionsController < ApplicationController def new @user_sesssion = UserSession.new end def create @user_sesssion = UserSession.new(params[:user_session]) if @user_session.create flash[:notice] = "Welcome back!" redirect_to root_path else render :new end end def destroy @user_session = UserSession.find @user_session.destroy redirect_to root_path end end 

应用/视图/ user_sessions

 = simple_form_for @user_session do |f| = f.error_notification = f.input :username, :label => false, :placeholder => "User name", :required => true, :input_html => {:size => 15, :class => "signin_input"} = f.input :password, :label => false, :placeholder => "Password", :required => true, :input_html => {:size => 15, :class => "signin_input"} = f.button :submit, "Sign in", :class => "a small" 

DB / schema.rb

  create_table "users", :force => true do |t| t.string "username", :null => false t.string "email", :null => false t.string "crypted_password", :null => false t.string "password_salt", :null => false t.string "persistence_token", :null => false t.string "perishable_token" t.datetime "created_at" t.datetime "updated_at" end add_index "users", ["email"], :name => "index_users_on_email" add_index "users", ["perishable_token"], :name => "index_users_on_perishable_token" add_index "users", ["persistence_token"], :name => "index_users_on_persistence_token" add_index "users", ["username"], :name => "index_users_on_username" 

的Gemfile

 gem 'rails', '3.1.3' gem 'pg' gem 'heroku' gem 'authlogic' gem 'will_paginate' gem 'simple_form' group :assets do gem 'sass-rails', '~> 3.1.5' gem 'coffee-rails', '~> 3.1.1' gem 'uglifier', '>= 1.0.3' gem 'haml-rails' gem 'zurb-foundation' end gem 'jquery-rails' gem 'rspec-rails', :group => [:test, :development] group :test do gem 'factory_girl_rails' gem 'capybara' gem 'guard-rspec' end 

配置/ routes.rb中

  resource :users resource :user_sessions match 'signin', :to => "user_sessions#new" match 'signout', :to => "user_sessions#destroy" get "pages/home" root :to => 'pages#home' 

经过一些更多的讨论后,它似乎是Authlogic :: Session :: Base的一个问题

 1.9.2-p290 :019 > session = UserSession.new(:username => "test", :password => "password") Authlogic::Session::Activation::NotActivatedError: You must activate the Authlogic::Session::Base.controller with a controller object before creating objects from /Users/vlad/.rvm/gems/ruby-1.9.2-p290@fitafy/gems/authlogic-3.1.0/lib/authlogic/session/activation.rb:47:in `initialize' from /Users/vlad/.rvm/gems/ruby-1.9.2-p290@fitafy/gems/authlogic-3.1.0/lib/authlogic/session/klass.rb:55:in `initialize' from /Users/vlad/.rvm/gems/ruby-1.9.2-p290@fitafy/gems/authlogic-3.1.0/lib/authlogic/session/scopes.rb:79:in `initialize' from (irb):19:in `new' from (irb):19 from /Users/vlad/.rvm/gems/ruby-1.9.2-p290@fitafy/gems/railties-3.1.3/lib/rails/commands/console.rb:45:in `start' from /Users/vlad/.rvm/gems/ruby-1.9.2-p290@fitafy/gems/railties-3.1.3/lib/rails/commands/console.rb:8:in `start' from /Users/vlad/.rvm/gems/ruby-1.9.2-p290@fitafy/gems/railties-3.1.3/lib/rails/commands.rb:40:in `' from script/rails:6:in `require' from script/rails:6:in `' 

我已经编辑了application_controller.rb来尝试克服上面的错误但仍然是相同的结果

  before_filter :activate_authlogic private def activate_authlogic Authlogic::Session::Base.controller = Authlogic::ControllerAdapters::RailsAdapter.new(self) end 

Ruby 1.9.2 Mac OS X 10.7.2(Lion)

我在这里想念的是什么?

你有一个拼写错误,你用额外的s拼写user_session 。 另外,你想要在会话上调用它,而不是“创建”。