Rails + Authlogic @current_user проблема - метод «Показать» больше не работает - PullRequest
0 голосов
/ 22 января 2011

Я реализовал Authlogic в своем приложении rails, которое отлично работает и тестирует. Пользователи могут войти, выйти и т. Д.

Однако, поскольку я изменил свои методы в users_controller , чтобы использовать переменную @ current_user , ни один из моих пользовательских методов или форм (как ни странно, кроме "index" ...) работа!

Например, этот метод «Показать» работает и показывает профиль пользователя для любого пользователя (Примечание: я хочу в конечном итоге ограничить это каким-то образом вошедшим в систему пользователем каким-либо образом):

def show
    @user = User.find(params[:id])
end

Если я буду следовать методу показа, как показано в приведении Authlogic rails и официальном примере:

def show
    @user = @current_user
end

Я получаю все виды undefined method METHOD for nil:NilClass ошибок. Кажется, что переменная @ current_user не содержит никакой информации пользователя.

Я предполагаю, что @current_user извлекает информацию из метода current_user , как определено в контроллере приложения ниже:

def current_user
  return @current_user if defined?(@current_user)
  @current_user = current_user_session && current_user_session.record
end

Что мне не хватает? Я догадываюсь, что нет сопоставления между объектом User из модели пользователя и методом current_user. Любая помощь будет принята с благодарностью!

Заранее спасибо!

~ Dan

Ответы [ 4 ]

5 голосов
/ 22 января 2011

Разве это не должно быть просто

def show
    @user = current_user
end

без @?

2 голосов
/ 25 сентября 2011

У меня была похожая проблема с authlogic и rails 3, это было из-за http-аутентификации apache, которую я имел на моем производственном сервере.И я исправил это, добавив приведенную ниже строку в мой user_session.rb (модель)

    allow_http_basic_auth false

Это ссылка на блог, которая спасла мне жизнь тьфу http://www.christopherirish.com/2011/08/12/rails-3-authlogic-sessions-not-persisting-in-production/comment-page-1/#comment-181

2 голосов
/ 22 января 2011

current_user - это помощник, который поставляется с authlogic, поэтому вы должны использовать его без '@'. Обычно вы создаете @sothing, чтобы передать его из контроллера в представление, чтобы получить доступ к тому, что вы подготовили в методе действия.

1 голос
/ 22 января 2011
def
if @current_user
 @user = @current_user
else
 @user = User.find(params[:id])
end
end

Просто предположение, попробуй.

...