|  |  | class Hack < ApplicationRecord
 | 
						
						
						
							|  |  |   # status: 0 未发布; 1已发布
 | 
						
						
						
							|  |  |   # diffcult: 难度 1:简单;2:中等; 3:困难
 | 
						
						
						
							|  |  |   # 编程题
 | 
						
						
						
							|  |  |   validates_length_of :name, maximum: 60
 | 
						
						
						
							|  |  |   validates :description, presence: { message: "描述不能为空" }
 | 
						
						
						
							|  |  |   validates :name, presence: { message: "名称不能为空" }
 | 
						
						
						
							|  |  |   # 测试集
 | 
						
						
						
							|  |  |   has_many :hack_sets, ->{order("position asc")}, :dependent => :destroy
 | 
						
						
						
							|  |  |   # 代码
 | 
						
						
						
							|  |  |   has_many :hack_codes, :dependent => :destroy
 | 
						
						
						
							|  |  |   has_many :hack_user_lastest_codes, :dependent => :destroy
 | 
						
						
						
							|  |  |   has_many :discusses, as: :dis, dependent: :destroy
 | 
						
						
						
							|  |  |   # 点赞
 | 
						
						
						
							|  |  |   has_many :praise_treads, as: :praise_tread_object, dependent: :destroy
 | 
						
						
						
							|  |  |   # 消息
 | 
						
						
						
							|  |  |   has_many :tidings, as: :container
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |   belongs_to :user
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |   scope :published, -> { where(status: 1) }
 | 
						
						
						
							|  |  |   scope :unpublish, -> { where(status: 0) }
 | 
						
						
						
							|  |  |   scope :opening, -> {where(open_or_not: 1)}
 | 
						
						
						
							|  |  |   scope :mine, -> (author_id){ where(user_id: author_id) }
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |   def language
 | 
						
						
						
							|  |  |     if hack_codes.count == 1
 | 
						
						
						
							|  |  |       hack_codes.first.language
 | 
						
						
						
							|  |  |     else
 | 
						
						
						
							|  |  |       hack_codes.pluck(:language).first
 | 
						
						
						
							|  |  |     end
 | 
						
						
						
							|  |  |   end
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |   def code
 | 
						
						
						
							|  |  |     if hack_codes.count == 1
 | 
						
						
						
							|  |  |       #tran_base64_decode64(hack_codes.first.code)
 | 
						
						
						
							|  |  |       hack_codes.first.code
 | 
						
						
						
							|  |  |     else
 | 
						
						
						
							|  |  |       #tran_base64_decode64(hack_codes.pluck(:code))
 | 
						
						
						
							|  |  |       hack_codes.pluck(:code)
 | 
						
						
						
							|  |  |     end
 | 
						
						
						
							|  |  |   end
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |   # 用于用户调试的第一个测试用例
 | 
						
						
						
							|  |  |   def input_test_case
 | 
						
						
						
							|  |  |     hack_sets.first&.input
 | 
						
						
						
							|  |  |   end
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |   # 管理员
 | 
						
						
						
							|  |  |   def manager?(user)
 | 
						
						
						
							|  |  |     user_id == user.id || user.admin_or_business?
 | 
						
						
						
							|  |  |   end
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | end
 |