Railsチュートリアルch.10例2 - 未定義メソッド `activated? '
に取り組んでいます
それは2つの部分から構成され、第二の部分がエラーを発生させます:
Explanation: A user wants to access an other user's profile page. When this account is not yet activated the user that wanted to access, gets redirected to the root page (easy right?)
私が知っているコードが何をすべきこの仕事:
(app/controllers/users_controller.rb)
def show
@user = User.find_by_id(params[:id])
redirect_to root_url and return unless @user.activated?
end
私はいかなるエラーが発生することなく、activated?
方法を使用している他の三つのコントローラのファイルがあります。しかし、この機会に、非アクティブ化されたユーザーのページにアクセスするとエラーが発生します。
これは、コンソールから出力されます。
Processing by UsersController#show as HTML
Parameters: {"id"=>"101"}
User Load (0.2ms) SELECT "users".* FROM "users" WHERE "users"."id" = ?
LIMIT 1 [["id", 101]]
Completed 500 Internal Server Error in 2ms (ActiveRecord: 0.2ms)
NoMethodError (undefined method `activated?' for nil:NilClass):
app/controllers/users_controller.rb:12:in `show'
エラーの原因は何?ユーザーはデータベース内にまだアクティブ化されていない(アクティブ化= false)。
編集:
エラーの原因となる問題が見つかりました。私はいくつかのアカウントを作ったが、これも削除した。それはうまくいったが、IDは最後に削除したIDから数え続ける。次のユーザーは101歳未満ではなく、107歳未満でした。データベースをリセットして、今すぐ動作します。もう一度データベースを見せてくれてありがとうsajinmp。
IDの問題は依然として残っていますが、これとは関係がないため、別のスレッドを作成します。
ようこそスタックオーバーフロー。これはかなり冗長です。あなたの特定の質問についてもっと簡潔にするためにそれを減らしてください。最後のリンクを含む「[ask]」と「[mcve]」をお読みください。 –
これは良いですか? – L03TJ3
エラーは、データベースに関連するものです。フェッチによって内部サーバーエラーが返されます。だからあなたはユーザーを取得しませんでした。詳細が必要です。 'User.find(101)'とは何ですか? – sajinmp