From 3ee8b3d711f53ecf1053112f937a1076c18eb636 Mon Sep 17 00:00:00 2001 From: daiao <358551898@qq.com> Date: Tue, 10 Mar 2020 01:16:57 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B3=A8=E9=87=8A=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/challenges_controller.rb | 13 ++++--- app/models/challenge.rb | 49 ++++++++++++++++-------- app/views/challenges/index.json.jbuilder | 12 +++--- 3 files changed, 47 insertions(+), 27 deletions(-) diff --git a/app/controllers/challenges_controller.rb b/app/controllers/challenges_controller.rb index c69f5bbfb..1d68e3a6e 100644 --- a/app/controllers/challenges_controller.rb +++ b/app/controllers/challenges_controller.rb @@ -155,15 +155,16 @@ class ChallengesController < ApplicationController def index uid_logger("identifier: #{params}") - base_columns = "challenges.id, challenges.subject, challenges.st, challenges.score, challenges.position, - challenges.shixun_id, games.identifier, games.status" - join_sql = "LEFT JOIN games ON games.challenge_id = challenges.id AND games.user_id = #{current_user.id}" + #base_columns = "challenges.id, challenges.subject, challenges.st, challenges.score, challenges.position, + # challenges.shixun_id, games.identifier, games.status" + #join_sql = "LEFT JOIN games ON games.challenge_id = challenges.id AND games.user_id = #{current_user.id}" # 下面2个参数是为了解决列表获取通关人数与正在游玩人数的问题 - @pass_games_map = @shixun.challenges.joins(:games).where(games: {status:2}).group(:challenge_id).reorder(nil).count - @play_games_map = @shixun.challenges.joins(:games).where(games: {status:[0,1]}).group(:challenge_id).reorder(nil).count + #@pass_games_map = @shixun.challenges.joins(:games).where(games: {status:2}).group(:challenge_id).reorder(nil).count + #@play_games_map = @shixun.challenges.joins(:games).where(games: {status:[0,1]}).group(:challenge_id).reorder(nil).count - @challenges = @shixun.challenges.joins(join_sql).select(base_columns) + #@challenges = @shixun.challenges.joins(join_sql).select(base_columns) + @challenges = @shixun.challenges.fields_for_list @editable = @shixun.status == 0 # before_action:有判断权限,如果没发布,则肯定是管理人员 @user = current_user @shixun.increment!(:visits) diff --git a/app/models/challenge.rb b/app/models/challenge.rb index 5646da363..ca88efbb3 100644 --- a/app/models/challenge.rb +++ b/app/models/challenge.rb @@ -69,15 +69,16 @@ class Challenge < ApplicationRecord end # 开启挑战 - def open_game shixun - # 这里的identifier,status是关联了games取了games的identifier,status - identifier = self.identifier - if identifier.present? - shixun.task_pass || self.status != 3 ? "/tasks/#{identifier}" : "" - else - self.position == 1 ? "/api/shixuns/#{shixun.identifier}/shixun_exec" : "" - end - end + # def open_game shixun + # # 这里的identifier,status是关联了games取了games的identifier,status + # identifier = self.identifier + # if identifier.present? + # shixun.task_pass || self.status != 3 ? "/tasks/#{identifier}" : "" + # else + # self.position == 1 ? "/api/shixuns/#{shixun.identifier}/shixun_exec" : "" + # end + # end + # # 开启挑战 # def open_game(user_id, shixun) @@ -93,16 +94,16 @@ class Challenge < ApplicationRecord # end ## 用户关卡状态 0: 不能开启实训; 1:直接开启; 2表示已完成 - def user_tpi_status shixun + def user_tpi_status shixun, user_id # todo: 以前没加索引导致相同关卡,同一用户有多个games # 允许跳关则直接开启 - identifier = self.identifier - if identifier.blank? - self.position == 1 ? 1 : 0 + game = games.where(user_id: user_id).take + if game.blank? + position == 1 ? 1 : 0 else - if status == 3 + if game.status == 3 shixun.task_pass ? 1 : 0 - elsif status == 2 + elsif game.status == 2 2 else 1 @@ -110,6 +111,24 @@ class Challenge < ApplicationRecord end end + # ## 用户关卡状态 0: 不能开启实训; 1:直接开启; 2表示已完成 + # def user_tpi_status shixun + # # todo: 以前没加索引导致相同关卡,同一用户有多个games + # # 允许跳关则直接开启 + # identifier = self.identifier + # if identifier.blank? + # self.position == 1 ? 1 : 0 + # else + # if status == 3 + # shixun.task_pass ? 1 : 0 + # elsif status == 2 + # 2 + # else + # 1 + # end + # end + # end + def tags_show if self.challenge_tags.nil? "--" diff --git a/app/views/challenges/index.json.jbuilder b/app/views/challenges/index.json.jbuilder index d4f2a7f59..409514643 100644 --- a/app/views/challenges/index.json.jbuilder +++ b/app/views/challenges/index.json.jbuilder @@ -16,12 +16,12 @@ if @challenges.present? json.st challenge.st json.name challenge.subject json.score challenge.score - json.passed_count @pass_games_map.fetch(challenge.id, 0) - #json.passed_count challenge.user_passed_count - json.playing_count @play_games_map.fetch(challenge.id, 0) - #json.playing_count challenge.playing_count + #json.passed_count @pass_games_map.fetch(challenge.id, 0) + json.passed_count challenge.user_passed_count + #json.playing_count @play_games_map.fetch(challenge.id, 0) + json.playing_count challenge.playing_count json.name_url shixun_challenge_path(challenge, shixun_identifier: @shixun.identifier) - json.open_game challenge.open_game(@shixun) + #json.open_game challenge.open_game(@shixun) if @editable json.edit_url edit_shixun_challenge_path(challenge, shixun_identifier: @shixun.identifier) json.delete_url shixun_challenge_path(challenge, shixun_identifier: @shixun.identifier) @@ -29,6 +29,6 @@ if @challenges.present? json.down_url index_down_shixun_challenge_path(challenge, :shixun_identifier => @shixun.identifier) if @shixun.challenges_count != challenge.position end #json.passed challenge.has_passed?(@user.id) - json.status challenge.user_tpi_status(@shixun) + json.status challenge.user_tpi_status(@shixun, @user.id) end end