31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
# File 'lib/has_karma.rb', line 31
def karma(options = {})
self.class.base_class.karmic_objects.collect do |object, attr|
v = object.where(["#{self.class.base_class.table_name}.#{self.class.base_class.primary_key} = ?", self.id])
v = v.joins("INNER JOIN #{Vote.table_name} ON #{Vote.table_name}.voteable_type = '#{object.to_s}' AND #{Vote.table_name}.voteable_id = #{object.table_name}.#{object.primary_key}")
v = v.joins("INNER JOIN #{self.class.base_class.table_name} ON #{self.class.base_class.table_name}.#{self.class.base_class.primary_key} = #{object.table_name}.#{attr[0]}")
upvotes = v.where(["#{Vote.table_name}.vote = ?", true])
downvotes = v.where(["#{Vote.table_name}.vote = ?", false])
if attr[1].length == 1 (upvotes.count.to_f * attr[1].first).round
else
(upvotes.count.to_f * attr[1].first - downvotes.count.to_f * attr[1].last).round
end
end.sum
end
|