jam-cloud/ruby/lib/jam_ruby/models/review_summary.rb

43 lines
1.5 KiB
Ruby

module JamRuby
class ReviewSummary < ActiveRecord::Base
attr_accessible :target, :target_id, :target_type, :avg_rating, :wilson_score, :review_count
belongs_to :target, polymorphic: true
validates :avg_rating, presence:true, numericality: true
validates :review_count, presence:true, numericality: {only_integer: true}
validates :wilson_score, presence:true, numericality: {greater_than:0, less_than:1}
validates :target_id, presence:true, uniqueness:true
class << self
# Query review_summaries using target type, id, and minimum review count
# * target_type: Only return review summaries for given target type
# * target_id: Only return review summary for given target type
# * minimum_reviews: Only return review summary made up of at least this many reviews
# * arel: start with pre-queried reviews (arel object)
# sorts by wilson score
def index(options={})
options ||= {}
if (options.key?(:arel))
arel = options[:arel].order("wilson_score DESC")
else
arel = ReviewSummary.order("wilson_score DESC")
end
if (options.key?(:target_type))
arel = arel.where("target_type=?", options[:target_type])
end
if (options.key?(:target_id))
arel = arel.where("target_id=?", options[:target_id])
end
if (options.key?(:minimum_reviews))
arel = arel.where("review_count>=?", options[:minimum_reviews])
end
arel
end
end
end
end