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
|
# File 'lib/acts_rateable/acts_rateable.rb', line 9
def acts_rateable(options = {})
if (Rails::VERSION::STRING.to_f >= 4)
has_many :rates, ->(obj) { where(resource_type: obj.class.base_class.name) }, class_name: ActsRateable::Rate, foreign_key: :resource_id, dependent: :destroy
has_many :rated, ->(obj) { where(author_type: obj.class.base_class.name) }, class_name: ActsRateable::Rate, foreign_key: :author_id, dependent: :destroy
has_one :rating, ->(obj) { where(resource_type: obj.class.base_class.name) }, class_name: ActsRateable::Rating, foreign_key: :resource_id, dependent: :destroy
has_one :count, ->(obj) { where(resource_type: obj.class.base_class.name) }, class_name: ActsRateable::Count, foreign_key: :resource_id, dependent: :destroy
else
has_many :rates, class_name: ActsRateable::Rate, conditions: { resource_type: self.base_class.name }, foreign_key: :resource_id, dependent: :destroy
has_many :rated, class_name: ActsRateable::Rate, conditions: { author_type: self.base_class.name }, foreign_key: :author_id, dependent: :destroy
has_one :rating, class_name: ActsRateable::Rating, conditions: { resource_type: self.base_class.name }, foreign_key: :resource_id, dependent: :destroy
has_one :count, class_name: ActsRateable::Count, conditions: { resource_type: self.base_class.name }, foreign_key: :resource_id, dependent: :destroy
end
scope :order_by_rating, lambda { | column='estimate', direction="DESC" |
includes(:rating).group('ar_ratings.id').order("ar_ratings.#{column.downcase} #{direction.upcase}")
}
scope :order_by_count, lambda { | column='estimate', direction="DESC" |
includes(:count).group('ar_ratings.id').order("ar_ratings.#{column.downcase} #{direction.upcase}")
}
after_create do
ActsRateable::Rating.where({resource_id: self.id, resource_type: self.class.base_class.name }).first_or_initialize.save
ActsRateable::Count.where({resource_id: self.id, resource_type: self.class.base_class.name }).first_or_initialize.save
end
include LocalInstanceMethods
end
|