module BazaModels::Model::HasManyRelations

Public Class Methods

included(base) click to toggle source
# File lib/baza_models/model/has_many_relations.rb, line 2
def self.included(base)
  base.extend(ClassMethods)
end

Private Instance Methods

destroy_has_many_relations() click to toggle source
# File lib/baza_models/model/has_many_relations.rb, line 71
def destroy_has_many_relations
  self.class.relationships.each do |relation_name, relation|
    next if relation.fetch(:type) != :has_many || relation[:dependent] != :destroy

    __send__(relation_name).each do |model|
      unless model.destroy
        errors.add(:base, model.errors.full_messages.join(". "))
        return false
      end
    end
  end

  true
end
restrict_has_many_relations() click to toggle source
# File lib/baza_models/model/has_many_relations.rb, line 58
def restrict_has_many_relations
  self.class.relationships.each do |relation_name, relation|
    next if relation.fetch(:type) != :has_many || relation[:dependent] != :restrict_with_error

    if __send__(relation_name).any?
      errors.add(:base, "can't be destroyed because it contains #{relation_name}")
      return false
    end
  end

  true
end