【问题标题】:How to shorten Exception Handling Message in Rails 5?如何缩短 Rails 5 中的异常处理消息?
【发布时间】:2016-11-03 13:42:04
【问题描述】:

我正在开发一个 Rails 项目并在其中使用异常处理,我是这样使用它的:

    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

正如我们所见,异常发生是由于 'name' 的重复条目,所以基本上我只想显示 DETAIL 部分,即“Key (name)=(Test2)已经存在。"

【问题讨论】:

    标签: ruby-on-rails validation exception-handling ruby-on-rails-5


    【解决方案1】:

    您拥有的是数据库级别的验证(约束),这很好。

    除此之外,您总是希望添加模型验证。

    在您的情况下,它将如下所示:

    validates :name, uniqueness: true
    

    它将确保验证和适当的消息,当

    @profile.update(profile_params)
    

    由于验证而无法更新记录。

    邮件可以在@profile.errors找到。

    通过这样的设置,您将不需要begin rescue,只需将其更改为:

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

    表单将包含开箱即用的验证错误。

    【讨论】:

    • 向你致敬
    猜你喜欢
    • 2016-03-18
    • 1970-01-01
    • 1970-01-01
    • 2013-08-02
    • 2015-08-19
    • 2011-09-16
    • 1970-01-01
    • 2012-07-02
    • 2013-07-19
    相关资源
    最近更新 更多