25 lines
726 B
Ruby
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 |