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中写道,在全套魔法场的帮助下,它起了作用。现在我明白了!谢谢:)他们应该将此添加到文档中。