Authlogic - current_user还是@current_user?

时间:2010-04-26 20:16:29

标签: ruby-on-rails authlogic

请帮助我理解一些事情。在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_atlast_login_ip)。除了加入迁移之外,我应该以某种方式初始化它们吗?

UPD 经过一些调查后,我发现如果“Magic fields”中只有last_login_atlast_login_ip字段,则不会填充它们。如果我添加一整套魔术场,它就能完美运作。

UPD2 我对current_user的关注只是UsersController:为什么它有@current_user而不是current_user

3 个答案:

答案 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_atlast_login_ip属性。模块:Authlogic :: Session :: MagicColumns

下的Authlogic docs中的更多信息

答案 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

至于魔术专栏,我不知道为什么他们不适合你。