1

私はこのようにそれを使用しています、Railsのプロジェクトに取り組んでおり、その中に例外処理を使用しています:Rails 5で例外処理メッセージを短縮する方法は?

begin 
     @profile.update(profile_params) 
     flash[:success] = SUCCESS_MESSAGE_FOR_PROFILE_UPDATED 
     redirect_to params[:referrer] 
    rescue => e 
     flash[:alert] = "#{e.message}" 
     render :edit 
    end 

例外が発生すると、それは非常に長いメッセージを生成します。我々のよう

PG::UniqueViolation: ERROR: duplicate key value violates unique constraint "index_companies_on_name" DETAIL: Key (name)=(Test2) already exists. : UPDATE "companies" SET "name" = $1, "updated_at" = $2 WHERE "companies"."id" = $3 

をそう基本的に私はちょうどすなわち詳細部分を見せたい、例外は「名前」のエントリを重複するため発生したことを確認できる「キー(名前)=(Test2を)がすでに存在している。

答えて

2

あなたが持っているものは、データベースレベルの検証(制約)です。

それに加えて、モデル検証を常に追加する必要があります。次のように

あなたのケースでは、それは見てみましょう:

validates :name, uniqueness: true 

@profile.update(profile_params) 

が検証のためにレコードを更新するために失敗した場合には、検証と適切なメッセージを確実にします。

メッセージは@profile.errorsにあります。フォームは、箱から出して検証エラーが含まれています

if @profile.update(profile_params) 
    flash[:success] = SUCCESS_MESSAGE_FOR_PROFILE_UPDATED 
    redirect_to params[:referrer] 
else 
    render :edit 
end 

:あなただけに変更し、begin rescueを持っている必要はありません、このような設定で

+0

あなたに帽子をかける –

関連する問題