请帮助我理解一些事情。在UsersController
中的Authlogic示例中,它始终使用@current_user
,例如:
def show
@user = @current_user
end
(摘自http://github.com/binarylogic/authlogic_example/blob/master/app/controllers/users_controller.rb)
为什么?在我的控制器中,我只使用current_user
而不是@current_user
。
此外 - Authlogic对我来说非常适合,但我没有看到填充的魔术栏(如last_login_at
或last_login_ip
)。除了加入迁移之外,我应该以某种方式初始化它们吗?
UPD
经过一些调查后,我发现如果“Magic fields”中只有last_login_at
和last_login_ip
字段,则不会填充它们。如果我添加一整套魔术场,它就能完美运作。
UPD2
我对current_user的关注只是UsersController
:为什么它有@current_user
而不是current_user
?
答案 0 :(得分:1)
current_user
通常是app/controllers/application_controller.rb
中定义的方法,它设置@current_user实例变量(如果尚未定义) - 这是一个示例:
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
重新“魔术列”,这些应该由Authlogic自动设置。例如,如果您的用户会话控制器登录用户:
@user_session = UserSession.new(params[:user_session])
@user_session.save
Authlogic应该为您编写last_login_at
和last_login_ip
属性。模块:Authlogic :: Session :: MagicColumns
答案 1 :(得分:1)
对于last_login_at和last_login_ip,您的表中是否有current_login_at和current_login_ip字段? last_login_at和last_login_ip在重置之前使用current_login_at和current_login_ip的值设置。
答案 2 :(得分:0)
我认为示例中的代码不是一个很好的例子。
您不应该使用@current_user来设置@user变量。因为如果在UserController的show动作之前未调用ApplicationController#current_user方法,它将无法工作。基本上,在调用current_user一次后它们都完全相同。
用户控制器应该如下所示
class UserController < ApplicationController
def show
@user = current_user
end
end
至于魔术专栏,我不知道为什么他们不适合你。