Class: ActiveRecord::DetailedDeleteRestrictionError

Inherits:
ActiveRecordError
  • Object
show all
Defined in:
lib/dependent_protect/delete_restriction_error.rb

Overview

This error is raised when trying to destroy a parent instance in N:1 or 1:1 associations (has_many, has_one) when there is at least 1 child associated instance. ex: if @project.tasks.size > 0, DeleteRestrictionError will be raised when trying to destroy @project

Instance Method Summary collapse

Constructor Details

#initialize(name, record) ⇒ DetailedDeleteRestrictionError

:nodoc:



6
7
8
9
10
# File 'lib/dependent_protect/delete_restriction_error.rb', line 6

def initialize(name, record)
  @name = name
  @record = record
  super(basic_message)
end

Instance Method Details

#basic_messageObject



12
13
14
15
16
17
18
19
20
21
# File 'lib/dependent_protect/delete_restriction_error.rb', line 12

def basic_message
  name = @name.to_s.gsub('_', ' ')
  assoc = @record.send(@name)
  count = assoc.respond_to?(:count) ? assoc.count : (assoc ? 1 : 0)
  if count == 1
    "Cannot delete record because dependent #{name} exists"
  else
    "Cannot delete record because #{count} dependent #{name.pluralize} exist"
  end
end

#detailed_messageObject



23
24
25
26
27
28
# File 'lib/dependent_protect/delete_restriction_error.rb', line 23

def detailed_message
  count = @record.send(@name).count
  examples = @record.send(@name).all(:limit => 5).map{|o| "#{o.id}: #{o.to_s}"}
  examples[4] = "...and #{count - 4} more" if count > 5
  basic_message + "\n\n\nThese include:\n#{examples.join("\n")}"
end