javaeye3/lib/rateable_model.rb

25 lines
726 B
Ruby

module RateableModel
def self.included(model)
model.serialize :rate_data
end
def new_rate(user, type)
return unless rateable_by?(user)
data = rate_data
data[type] = (data[type] ||= 0) + (user.level > 0 ? user.level : 1)
data['rated_user'] << user.id
rate_data_will_change!
update_attribute(:rate_data, data)
check_for_over_weight(type)
end
def rateable_by?(user)
return false if user == -1 || self.user_id == user.id || user.score <= 30 || status_flag != 'normal'
not rate_data['rated_user'].include? user.id
end
def rate_data
write_attribute(:rate_data, {'rated_user' => []}) if read_attribute(:rate_data).nil?
read_attribute(:rate_data)
end
end