Class: ActiveRecord::DetailedDeleteRestrictionError
- Inherits:
-
ActiveRecordError
- Object
- ActiveRecordError
- ActiveRecord::DetailedDeleteRestrictionError
- Defined in:
- lib/dependent_restrict/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
- #basic_message ⇒ Object
- #detailed_message ⇒ Object
-
#initialize(name, record) ⇒ DetailedDeleteRestrictionError
constructor
:nodoc:.
Constructor Details
#initialize(name, record) ⇒ DetailedDeleteRestrictionError
:nodoc:
6 7 8 9 10 |
# File 'lib/dependent_restrict/delete_restriction_error.rb', line 6 def initialize(name, record) @name = name @record = record super() end |
Instance Method Details
#basic_message ⇒ Object
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
# File 'lib/dependent_restrict/delete_restriction_error.rb', line 12 def assoc = @record.send(@name) count = assoc.respond_to?(:count) ? assoc.count : (assoc ? 1 : 0) name = I18n.t(@name.to_s.singularize, { :scope => [:activerecord, :models], :count => count, :default => count == 1 ? @name.to_s.gsub('_', ' ') : @name.to_s.gsub('_', ' ').pluralize }).downcase if count == 1 I18n.t('dependent_restrict.basic_message.one', :name => name, :default => "Cannot delete record because dependent #{name} exists") else I18n.t('dependent_restrict.basic_message.others', :count => count, :name => name, :default => "Cannot delete record because #{count} dependent #{name.pluralize} exist") end end |
#detailed_message ⇒ Object
28 29 30 31 32 33 34 |
# File 'lib/dependent_restrict/delete_restriction_error.rb', line 28 def count = @record.send(@name).count examples = @record.send(@name).limit(5).map{|o| "#{o.id}: #{o.to_s}"} examples[4] = "...#{I18n.t('dependent_restrict.detailed_message.and_more', :count => count - 4, :default => "and #{count-4} more")}" if count > 5 + "\n\n\n#{I18n.t('dependent_restrict.detailed_message.includes', :default => "These include")}:\n#{examples.join("\n")}" end |