class Erratum::Errors::InvalidAssociation

Attributes

association_id[RW]
association_name[RW]

Public Class Methods

convert(original_error, overrides = {}) click to toggle source
# File lib/erratum/errors/crud/invalid_association.rb, line 15
def self.convert(original_error, overrides = {})
  initialization_parameters = {}

  case original_error.class.name
  when 'ActiveRecord::InvalidForeignKey'
    message_info_pattern = /DETAIL:  Key \((.*?)(?:_id)?\)=\(([a-f0-9\-]+)\)/
    message_info         = original_error
                             .message
                             .match(message_info_pattern)
                             .captures

    initialization_parameters = {
      association_name: message_info[0],
      association_id:   message_info[1],
    }
  end

  new(initialization_parameters.merge(overrides))
end

Public Instance Methods

detail() click to toggle source
# File lib/erratum/errors/crud/invalid_association.rb, line 43
  def detail
    if association_name == 'id'
      <<~HEREDOC.chomp.tr("\n", ' ')
        You cannot #{action} this #{resource_name} because its
        #{association_name} is still being referenced by other things.
      HEREDOC
    else
      <<~HEREDOC.chomp.tr("\n", ' ')
        The #{association_name} that you attempted to associate with the
        #{resource_name} was not valid.
      HEREDOC
    end
  end
http_status() click to toggle source
# File lib/erratum/errors/crud/invalid_association.rb, line 35
def http_status
  422
end
source() click to toggle source
Calls superclass method Erratum::Errors::Crud#source
# File lib/erratum/errors/crud/invalid_association.rb, line 57
def source
  super.merge(
    'association'    => association_name,
    'association_id' => association_id,
  )
end
title() click to toggle source
# File lib/erratum/errors/crud/invalid_association.rb, line 39
def title
  'Association Error'
end