Authlogic + Rails3 - неопределенный метод `Login 'для nil: NilClass

Я новичок в Rails и решил начать с Rails3. После долгих поисков мне удалось заставить немного работать с Authlogic. Я могу зарегистрировать пользователя, войти и выйти.

Теперь я хотел бы добавить больше функций, получить больше работы с authlogic. Я использую Railscast EP 160 в качестве ссылки.

Части кода, найденные в учебнике, выдают ошибки: Например:

<!-- layouts/_topbar.erb -->
<%= link_to "Login", login_path %>

и я получаю следующее сообщение об ошибке:

undefined local variable or method `login_path' for #<#<Class:0x0000000311e8f8>:0x0000000310af38>

Чтобы преодолеть это, ive просто использовал строку. т.е. ‹% = link_to" Login "," / UserSessions / new "%>

Теперь кажется, что я зашел в тупик. Когда я пытаюсь вывести текущего пользователя с помощью:

<%= @user.Login %>

Я получаю сообщение об ошибке, которое невозможно обойти. Не могли бы вы мне помочь? Спасибо :) Пожалуйста, найдите ниже сообщение об ошибке и часть кода.

undefined method `Login' for nil:NilClass

Считывает полную трассировку [усечено]

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'

Параметры запроса: Нет

Мой гем-файл гласит:

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: [часть, которая получает текущего пользователя .. также взято из онлайн-примеров]

  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

модели / 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  

модели / user.rb:

class User < ActiveRecord::Base
  acts_as_authentic
end

контроллеры / 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
    end
  end


end

Ладно решил перейти на Devise .. вроде работает из коробки с рельсами 3 .. ура!


person c-ram    schedule 20.10.2010    source источник


Ответы (1)


Пользователь не вошел в систему, поэтому значение @user равно нулю. Добавьте сюда логику, как в примере приложения Rails3.

http://github.com/trevmex/authlogic_rails3_example/blob/master/app/views/layouts/application.html.erb

Обратите внимание: я использую эту ветку для authlogic для rails3, хотя я не уверен, лучше она или хуже, чем основная ветка.

http://github.com/odorcicd/authlogic/tree/rails3

Также обратите внимание, что я пробовал rails3 с railscast 160, но он устарел. Мне больше повезло, если я использовал railscast только для базовой ориентации, а затем придерживался примера приложения из trevmex на github выше для фактической реализации.

person Peter Lyons    schedule 27.10.2010
comment
Спасибо, Питер! Мне жаль, что я не задержался немного дольше, чтобы увидеть ваш ответ ... но я просто отказался от authlogic и пошел с devise ... кажется, хорошо до сих пор. - person c-ram; 27.10.2010