AuthLogic UserSessions控制器返回零

时间:2011-12-23 21:30:01

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1 authlogic null

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

我很高兴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"

分贝/ 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 `<top (required)>'
    from script/rails:6:in `require'
    from script/rails:6:in `<main>'

我已编辑 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)

我在这里缺少什么?

1 个答案:

答案 0 :(得分:1)

你有一个拼写错误,你拼写user_session额外的s。另外,你想要在会话上调用save,而不是`create。