2

DB をリセットすると、すべてのページで次のエラーが発生します。

ActiveRecord::RecordNotFound in HomeController#index

Couldn't find User with id=1

lib/authenticated_system.rb:15:in `current_user'
lib/authenticated_system.rb:23:in `logged_in?'
lib/authenticated_system.rb:36:in `login_required'

問題のあるコードauthenticated_system.rbは次のとおりです。

def current_user
  @current_user ||= User.find(session[:user_id]) if session[:user_id].present?
end

したがって、id = 1 のユーザーを探している理由がわかりません。ユーザーはいません。current_user何も返してはいけません。このエラーが発生するのはなぜですか?

参考までにlogged_in?

def logged_in?
 !current_user.nil?
end

そしてlogin_required

def login_required
  logged_in? && authorized? ? true : access_denied
end
4

2 に答える 2

3

ブラウザを閉じて再起動しましたか?

ブラウザーが開いている間、セッションは存在します。データベースをリセットしたからといって、セッションがなくなったわけではありません。

于 2013-04-22T22:25:25.757 に答える
0

User.find は、レコードが見つからない場合、例外 ActiveRecord::RecordNotFound を発生させます。何も見つからない場合は nil を返す User.find_by_id を使用することをお勧めします。このようにして、セッションが存在しない user_id を参照する場合 (この場合のように、データベースをリセットしてもセッション Cookie がまだ存在する場合 - ユーザーが削除された場合にも発生します)、目的の結果が得られます。

于 2013-04-22T22:29:38.420 に答える