6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
# 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
|