Ruby on rails Authlogic-当前用户还是@current用户?
请帮我理解一下。在Ruby on rails Authlogic-当前用户还是@current用户?,ruby-on-rails,authlogic,Ruby On Rails,Authlogic,请帮我理解一下。在userscoontroller中的Authlogic示例中,始终使用@current\u user,例如: def show @user = @current_user end (摘自) 为什么呢?在我的控制器中,我只使用当前用户,而不是@current\u用户 除此之外,Authlogic对我来说非常适合,但我看不到填充神奇列(如last\u login\u at或last\u login\u ip)。除了添加到迁移中之外,我是否应该以某种方式专门初始化它们 UPD
userscoontroller
中的Authlogic示例中,始终使用@current\u user
,例如:
def show
@user = @current_user
end
(摘自)
为什么呢?在我的控制器中,我只使用当前用户
,而不是@current\u用户
除此之外,Authlogic对我来说非常适合,但我看不到填充神奇列(如last\u login\u at
或last\u login\u ip
)。除了添加到迁移中之外,我是否应该以某种方式专门初始化它们
UPD
经过一些调查,我发现如果只有来自“魔法域”的last\u login\u at
和last\u login\u ip
,那么它们将不会被填充。如果我添加一组完整的魔法场,它就可以完美地工作
UPD2
我对当前用户的关注只是关于
UsersController
:为什么它有@current\u user
而没有当前用户
?当前用户
通常是在app/controllers/application\u controller.rb
中定义的一个方法,如果尚未设置@current\u 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\u login\u和last\u login\u ip
属性。模块下的更多信息:Authlogic::Session::MagicColumns我认为示例中的代码不是一个很好的示例
您不应该使用@current\u user来设置@user变量。因为如果在显示UserController的操作之前没有调用ApplicationController#current_user方法,它将不起作用。在当前用户被调用一次之后,它们基本上是完全相同的
用户控制器应该如下所示
class UserController < ApplicationController
def show
@user = current_user
end
end
class UserController
至于魔法列,我不知道它们为什么不适合您。至于last\u login\u at和last\u login\u ip,您的表中是否有current\u login\u at和current\u login\u ip字段?重置前,将使用当前登录和当前登录ip的值设置上次登录和上次登录ip 是,当前用户是ApplicationController中定义的方法。但这并不能回答为什么UsersController使用@current\u user。至于last_login_at和last_login_ip,是否有不填充它们的开发环境设置?我完全按照示例设置它们。current_user是一个帮助器方法,它跟踪当前登录的用户@当前用户是与模型交互的实例变量。他们完全不同,我理解他们的不同。我不知道@current\u user是如何在UsersController中初始化的?UsersController继承自ApplicationController,因此它得到了它的方法。当您从UsersController(或UserSessionController)调用current\u user
时,您正在调用在应用程序\u controller.rb中定义的方法。我会检查您正在使用的代码示例--它可能不完整或过时。正如Jens所建议的,你应该调用current\u user
而不是使用实例变量,除非你知道@current\u user
正在你的代码中的其他地方设置。这也是我所想的,我很惊讶在代码中看到@current\u user而不是current\u user。这不是我的代码,这是authlogic的官方示例。请检查用户模型中是否有可访问的属性。如果您有,您需要将这些字段列为白名单。我没有任何属性可访问的属性,只有“acts_as_authentic”。关于为什么@current_user和not current_user,您应该询问作者?这是示例中的一个明显缺陷。它应该是current_user,因为@current_user如果不初始化就不能工作。是的,这就是我的想法。然而,上面的代码是有效的,它是authlogic的标准示例。这不是我的代码。是的,它在示例中,但它是一个糟糕的示例,它应该是@user=current\u userAh,这是有意义的。我在UPD中写道,在全套魔法场的帮助下,它起了作用。现在我明白了!谢谢:)他们应该将此添加到文档中。