2014-10-23 11:30:34 +08:00
|
|
|
class ContestingProject < ActiveRecord::Base
|
|
|
|
attr_accessible :contest_id, :description, :project_id, :user_id, :reward
|
|
|
|
|
|
|
|
belongs_to :contest
|
|
|
|
belongs_to :project
|
|
|
|
belongs_to :user
|
|
|
|
|
|
|
|
DESCRIPTION_LENGTH_LIMIT = 500
|
|
|
|
validates :description, length: {maximum:DESCRIPTION_LENGTH_LIMIT }
|
|
|
|
validates :user_id, presence: true
|
|
|
|
validates :contest_id, presence: true, uniqueness: {scope: :project_id}
|
|
|
|
validates :project_id, presence: true
|
|
|
|
|
|
|
|
validate :validate_user
|
|
|
|
validate :validate_contest
|
|
|
|
validate :validate_project
|
|
|
|
|
|
|
|
def self.create_contesting(contest_id, project_id, description = nil)
|
|
|
|
self.create(:user_id => User.current.id, :contest_id => contest_id,
|
|
|
|
:project_id => project_id, :description => description)
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
def update_reward(which)
|
|
|
|
self.update_attribute(:reward,which)
|
|
|
|
end
|
|
|
|
|
|
|
|
def get_reward
|
|
|
|
self.reward
|
|
|
|
end
|
|
|
|
|
|
|
|
def cancel_contesting
|
|
|
|
unless self.nil?
|
|
|
|
if User.current.id == self.user_id
|
|
|
|
self.destroy
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
private
|
|
|
|
|
|
|
|
def validate_user
|
|
|
|
errors.add :user_id, :invalid if user.nil? || !user.active?
|
|
|
|
end
|
|
|
|
|
|
|
|
def validate_contest
|
|
|
|
errors.add :contest_id, :invalid if contest.nil?
|
|
|
|
end
|
|
|
|
|
|
|
|
def validate_project
|
|
|
|
errors.add :project_id, :invalid if project.nil?
|
|
|
|
end
|
|
|
|
end
|