0

Я установил новое приложение Rails и использую Authlogic для аутентификации.AuthLogic UserSessions Controller Returning Nil

Я могу с радостью использовать пользователей 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/[email protected]/gems/authlogic-3.1.0/lib/authlogic/session/activation.rb:47:in `initialize' 
    from /Users/vlad/.rvm/gems/[email protected]/gems/authlogic-3.1.0/lib/authlogic/session/klass.rb:55:in `initialize' 
    from /Users/vlad/.rvm/gems/[email protected]/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/[email protected]/gems/railties-3.1.3/lib/rails/commands/console.rb:45:in `start' 
    from /Users/vlad/.rvm/gems/[email protected]/gems/railties-3.1.3/lib/rails/commands/console.rb:8:in `start' 
    from /Users/vlad/.rvm/gems/[email protected]/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 

рубин 1.9.2 Mac OS X 10.7.2 (Lion)

Что я здесь отсутствует?

ответ

1

У вас есть опечатка, вы указали user_session с дополнительными с. Кроме того, это save вы хотите вызвать сеанс, а не `create.

+0

Лоб ... slap – vladiim

+0

Существует [кампания по очистке переполнения стека] (http://meta.stackexchange.com/q/167342), удалив эти вопросы, связанные с типографией, мы действительно сможем вам помочь! Не могли бы вы немного наброситься, запустив при этом честный голос по этому вопросу? –

Смежные вопросы