私のアプリケーションには、同じセッション オブジェクトにアクセスする必要がある 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