0

解決済み: 誰もサインインしておらず、現在のユーザーがいないときにコントローラーで current_user を呼び出すと、エラーがスローされます。労力/時間に感謝します。

Web サイトでアカウントを持っているかどうかに関係なく、アプリでプロファイル ページを表示できるようにしたいと考えています。現在、エラーが発生します:

SQL:

Started GET "/users/1" for 127.0.0.1 at 2013-02-05 05:08:50 -0500
Processing by UsersController#show as HTML
Parameters: {"id"=>"1"}
User Load (0.2ms)  SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT 1  [["id", "1"]]
User Load (0.2ms)  SELECT "users".* FROM "users" WHERE "users"."remember_token" IS NULL LIMIT 1

NoMethodError (undefined method `microposts' for nil:NilClass):
app/controllers/users_controller.rb:34:in `show'

誰かが実際にサインインしていないときにトークンが存在しないはずのときに、記憶トークンを定義しようとしていると思います。

ユーザーコントローラー:

def show
  @user = User.find_by_id(params[:id])
  @microposts = @user.microposts.paginate(page: params[:page])
  @micropost  = current_user.microposts.build
End
4

3 に答える 3

0

これを試して..

 def show
   @user = User.find(params[:id])
   @microposts = @user.microposts.paginate(page: params[:page]) if !@user.nil?
   @micropost  = current_user.microposts.build
   End

エラーを回避します。

于 2013-02-05T10:20:16.943 に答える
0

問題は current_user が nil であり、誰もサインインしていないときにコントローラーで呼び出されたことです。その結果、エラーがスローされます。

追加した if signed_in? current_user が含まれている特定の行の隣にあり、すべてが適切にレンダリングされるようになりました。

def signed_in?
  !current_user.nil?
end

def current_user
  @current_user ||= User.find_by_remember_token(cookies[:remember_token])
end
于 2013-02-05T11:17:39.800 に答える
0

ユーティリティはfind_by_foo「Record-not-found」エラーをスローしませんが、メソッドはスローfindします。整数を取得するfindと、自動的に Id で検索されます。

def show
  @user = User.find(params[:id])
  @microposts = @user.microposts.paginate(page: params[:page])
  @micropost  = current_user.microposts.build
End

この ID を持つユーザーがいない場合、RecordNotFound がスローされます。その結果、本番環境では 404 になります。

編集:更新されたコードを確認した後、問題はcurrent_userUser.find ではなくヘルパー メソッドにあるようです。

于 2013-02-05T09:59:37.597 に答える