|
|
|
|
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
|
|
|
|
|
# 知识点
|
|
|
|
|
has_many :tag_discipline_containers, dependent: :destroy
|
|
|
|
|
|
|
|
|
|
belongs_to :user
|
|
|
|
|
belongs_to :sub_discipline
|
|
|
|
|
|
|
|
|
|
has_one :item_bank, as: :container, dependent: :destroy
|
|
|
|
|
|
|
|
|
|
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
|