当我在Rails中收到PG :: ForeignKeyViolation错误时,如何显示flash通知消息

时间:2017-09-26 17:22:35

标签: ruby-on-rails postgresql

我有两个模型,Bidding和BiddingItem。

class Bidding < ActiveRecord::Base
   has_many :bidding_items, dependent: :restrict_with_error
   accepts_nested_attributes_for :bidding_items, reject_if: :all_blank, allow_destroy: true
end

class BiddingItem < ActiveRecord::Base
   belongs_to :bidding
end

通过向Bidding模型添加以下依赖项,我没有错误,但我仍然希望向用户显示一条消息。

has_many :bidding_items, dependent: :restrict_with_error

如何向用户显示flash通知消息,而不是获取此错误视图或完全没有错误(通过使用我之前提到的依赖项)?

enter image description here

2 个答案:

答案 0 :(得分:1)

您可以使用biddings_controller中的ActiveSupport#rescue_from并在with选项中传递已定义的私有方法,以便每次在该控制器中发生此类错误时“提升”。

由于您可以在所使用的方法中定义任何逻辑,因此您可以重定向到相同的biddings_path并在notice闪存中传递自定义消息,例如:

class BiddingsController < ApplicationController
  rescue_from ActiveRecord::InvalidForeignKey, with: :invalid_foreign_key

  private

  def invalid_foreign_key
    redirect_to biddings_path, notice: 'Some custom message.'
  end
end

您只需要确保在当前视图中呈现notice

答案 1 :(得分:1)

看起来您正在尝试删除出价,并且有一个bidding_item条目指向您要删除的内容,对吗?

我认为你应该添加一个回调函数before_delete,检查这种情况并添加错误。

如果您在删除:nullify

bidding_item将使该值无效,您也可以使用bidding标记