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