Rails + Authlogic @current_user问题 - “显示”方法不再有效

时间:2011-01-21 21:32:45

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

我在我的rails应用程序中实现了Authlogic,它的工作和测试非常好。用户可以登录,注销等。

但是,由于我在 users_controller 中更改了我的方法以使用 @current_user 变量,因此我的用户方法或表单都没有(奇怪的是“索引”除外)。 。)工作!

例如,这个“显示”方法可以工作并显示任何用户的用户配置文件(注意:我想最终以某种方式将此限制为当前登录的用户):

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

如果我按照Authlogic rails cast中显示的show方法和官方示例:

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方法之间没有映射。任何帮助将不胜感激!

提前致谢!

〜丹

4 个答案:

答案 0 :(得分:5)

不应该只是

def show
    @user = current_user
end

没有@

答案 1 :(得分:2)

current_user是authlogic附带的助手,所以你必须在没有'@'的情况下使用它。 通常你创建@sothing来将它从控制器传递到视图,因此你将访问你在action方法中准备的东西。

答案 2 :(得分:2)

我在authlogic和rails 3上遇到了类似的问题,这是因为我在生产服务器上使用了apache http身份验证。 我通过将以下行添加到我的user_session.rb(模型)

来解决这个问题
    allow_http_basic_auth false

这是保存我生命的博客链接 phew http://www.christopherirish.com/2011/08/12/rails-3-authlogic-sessions-not-persisting-in-production/comment-page-1/#comment-181

答案 3 :(得分:1)

def
if @current_user
 @user = @current_user
else
 @user = User.find(params[:id])
end
end

只是一个猜测,试一试。