1

私のアプリケーションには、同じセッション オブジェクトにアクセスする必要がある 2 つの異なるコントローラーがあります。現在:active_record_store、ユーザーの取得にデータベースを使用したくないため、使用しています。

私はこのようなことをしています:

API コントローラーはユーザーの電子メールを受け取り、ユーザー オブジェクトを作成します (有効な?、ハッシュ、およびその他のメソッド)。

class ApiController < ApplicationController
  def login
    user = Requester.validate_email params[:email]
    if user.valid?
      session[:current_user] = user # works
      current_user = user           # dont work
      redirect_to app_root_path
    else
      redirect_to app_signup_path
    end
  end
end

ホームコントローラーは、ユーザーがすでに「ログイン」しているため、ユーザーにページを表示します

class PagesController < ApplicationController

  def home
    puts "Home"

    # Everything here works fine
    puts session[:current_user].hash
    puts session[:current_user]
    puts session[:current_user].nil?

    # Nothing here works
    puts current_user.hash
    puts current_user
    puts current_user.nil?
  end
end

current_userおよびcurrent_user=メソッドは次の場所にありApplicationControllerます。

class ApplicationController < ActionController::Base
  protect_from_forgery

private 
  def current_user
    session[:user]
  end

  def current_user=(user)
    session[:user] = user
  end
end

私は何を間違っていますか?session[:user]プライベート メソッド内からアクセスできないのはなぜですか?


Rails 3.2.11 と sqlite3 を開発で使用し、postgresql を本番環境で使用する


編集

問題が見つかりました。どうやら を使用できません。使用current_user = <some object>するとcurrent_user(<some object>)、これが機能します。

def current_user(user)
  session[:user] = user
end

def current_user=(user)
  session[:user] = user
end

def current_user
  session[:user]
end
4

1 に答える 1