私は次の作品を扱っています。
def index
@user = User.find(params[:id])
rescue
flash[:notice] = "ERROR"
redirect_to(:action => 'index')
else
flash[:notice] = "OK"
redirect_to(:action => 'index')
end
今、私は正しいIDを持っているかどうかにかかわらず、常に「OK」と表示されますが、何が間違っているのでしょうか。
DBに「エラー」を表示するIDがない場合に必要です。私もrescue ActiveRecord::RecordNotFound
を使おうとしましたが、同じことが起こります。
すべての助けに感謝します。
レスキューブロックの終了後のすべてのコードは、レスキューブロックにリターンがない場合にのみ解釈されます。したがって、レスキューブロックの最後にリターンを呼び出すことができます。
def index
begin
@user = User.find(params[:id])
rescue
flash[:notice] = "ERROR"
redirect_to(:action => 'index')
return
end
flash[:notice] = "OK"
redirect_to(:action => 'index')
end
または
def index
@user = User.find(params[:id])
# after is interpret only if no exception before
flash[:notice] = "OK"
redirect_to(:action => 'index')
rescue
flash[:notice] = "ERROR"
redirect_to(:action => 'index')
end
しかし、あなたの場合は、 rescue_from または rescue_in_public を使用する方が良いでしょう。
お気に入り
class UserController < ApplicationController
def rescue_in_public(exception)
flash[:notice] = "ERROR"
redirect_to(:action => 'index')
end
def index
@user = User.find(params[:id])
flash[:notice] = "OK"
redirect_to(:action => 'index')
end
end
しかし、rescue_in_publicの使用は本当に良いアドバイスではありません
全体的にRailsレスキューの答え:
私はこれがとてもクールだと思いました:
@user = User.find(params[:id]) rescue ""