パラメータのないメソッド、またはレコードを生成しないパラメータIDを呼び出すと、nilチェックが失敗する理由を理解しようとしています。
@game = Game.where(:id => params[:id]).first
if @game.nil?
redirect_to root_path
end
コンソールでは、これは正常に機能します。
>> pp @game.nil?
=> true
アプリケーションでは、これは失敗します (リダイレクトされません!)、なぜですか?
編集1:
コンソール (パラメーター ID nil または存在しないレコード値): これは機能します:
unless Game.exists?(params[:id])
raise('ok')
end
しかし、実際のアプリケーションではそうではありません:(レコードが存在または有効であることを確認するためにほぼすべての方法を試しましたが、コードはこのチェックを過ぎて実行され、そのまま続行されます
編集2:
returnステートメントを使用していることに気付いた他のコードを見ると、ITはそれで解決するようです..
作品:
unless Game.exists?(params[:id])
redirect_to root_path
return
end
失敗:
unless Game.exists?(params[:id])
redirect_to root_path
end
redirect_to 明示的な後にリターンが必要な理由がよくわかりません