我在我的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方法之间没有映射。任何帮助将不胜感激!
提前致谢!
〜丹
答案 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
只是一个猜测,试一试。