0

authlogicでデータをユーザーに関連付ける方法を探し続けています。私は考えられるすべてのことを試しましたが、関連付けようとしているデータを取得するものは何もないようです。誰かが共有できる例を持っていますか?私は現在、このように現在関連付けられている電子メールを取得しようとしています。

UserSessionsController:

  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 に答える