【问题标题】:Authlogic User DataAuthlogic 用户数据
【发布时间】:2012-08-21 21:03:38
【问题描述】:

我一直在尝试找到一种将数据与 authlogic 中的用户相关联的方法。我已经尝试了我能想到的一切,但似乎没有任何东西能抓住我试图与之关联的数据。有没有人可以分享一个例子?我目前正在尝试像这样获取当前关联的电子邮件。

用户会话控制器:

  def new
    @user_session = UserSession.new
    @current_User = current_user
    respond_to do |format|
      format.html # new.html.erb
      format.json { render json: @user_session }
    end
  end

user_sessions 视图:

<p> <%= @current_user.email %> </p>

应用控制器:

helper_method :current_user

  private

  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

并得到这个错误:

undefined method `email' for nil:NilClass

关于:

<p> <%= @current_user.email %> </p>

提前感谢您的帮助!真的很感激!

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3 model authlogic


    【解决方案1】:

    确保在您的ApplicationController 顶部有

    class ApplicationController
      helper_method :current_user_session, :current_user
    

    那么,在你看来,不要使用@current_user,使用current_user

    <p> <%= current_user.email %> </p>
    

    当您在视图中调用 @current_user 时,从未为该请求设置它,这就是您收到 nil:NilClass 错误的原因。

    helper_method :current_user_session, :current_user
    

    这使得 current_user 方法已经在你所有扩展 ApplicationController 的控制器中可用,也可以作为辅助方法在你的视图中使用。通过使用current_user,您保证返回当前的UserSession 实例。在第一次检索后(第一次调用current_user@current_user 将有一个值,意思是

    return @current_user if defined?(@current_user)
    

    将执行,在随后对current_user 的调用中跳过查找当前UserSession 实例的尝试。

    【讨论】:

    • 哇,非常感谢!这个解释非常清楚和有帮助!非常感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-13
    • 2011-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多