class Alchemy::Custom::Model::PictureUsedBy

Public Class Methods

used_by(picture_id) click to toggle source
# File lib/alchemy/custom/model/picture_used_by.rb, line 6
def self.used_by(picture_id)
  model_to_search_for = ApplicationRecord.descendants.collect(&:name)

  finded_pictures = []
  model_to_search_for.each do |mname|
    relations = mname.constantize.reflections.collect{|c| c[0] }

    relations.each do |refc|
      relation = mname.constantize.reflections[refc]

      if relation.class_name == "Alchemy::Picture"
        begin
          if relation.class == ActiveRecord::Reflection::BelongsToReflection
            mm = mname.constantize.where(relation.foreign_key.to_sym => picture_id)
            mm.each do |rec|
              finded_pictures << rec
            end
          end

          if relation.class == ActiveRecord::Reflection::ThroughReflection
            relation_through = mname.constantize.reflections[relation.options[:through].to_s]
            mm = relation_through.klass.where(relation.foreign_key.to_sym => picture_id)
            mm.each do |rec|
              rec.class.reflections.collect{|c| c[0] }.each do |relative_relation|
                relation_relation_class = rec.class.reflections[relative_relation]
                if relation_relation_class.class_name == mname
                  mm = relation_relation_class.klass.find( rec[relation_relation_class.foreign_key] )
                  finded_pictures << mm unless mm.nil?
                end
              end
            end
          end

        rescue Exception => excp
          Rails.logger.error {"PictureUsedBy ERROR: #{excp.message}"}
        end
      end
    end
  end
  finded_pictures
end