0

我一直在尝试找到一种将数据与 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>

预先感谢您的任何帮助!真的很感激!

4

1 回答 1

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)

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

于 2012-08-21T21:09:05.027 回答