diff --git a/app/forms/users/apply_authentication_form.rb b/app/forms/users/apply_authentication_form.rb index e0e7931b1..c7c171e31 100644 --- a/app/forms/users/apply_authentication_form.rb +++ b/app/forms/users/apply_authentication_form.rb @@ -3,7 +3,7 @@ class Users::ApplyAuthenticationForm attr_accessor :name, :show_realname, :id_number, :gender, :upload_image, :attachment_ids - validates :name, presence: true + validates :name, presence: true, length: { minimum: 2, maximum: 10 }, format: { with: CustomRegexp::LASTNAME, message: "2-10位中英文、数字" } validate :validate_ID_number validate :validate_attachment_ids diff --git a/app/forms/users/update_account_form.rb b/app/forms/users/update_account_form.rb index 16c3c8013..0eae399d8 100644 --- a/app/forms/users/update_account_form.rb +++ b/app/forms/users/update_account_form.rb @@ -5,8 +5,8 @@ class Users::UpdateAccountForm attr_accessor :nickname, :name, :show_realname, :gender, :location, :location_city, :identity, :student_id, :technical_title, :school_id, :department_id - validates :nickname, presence: true, length: { maximum: 20 } - validates :name, presence: true, length: { maximum: 10 } + validates :nickname, presence: true, length: { minimum: 2, maximum: 20 }, format: { with: CustomRegexp::NICKNAME, message: "2-20位中英文、数字及下划线" } + validates :name, presence: true, length: { minimum: 2, maximum: 10 }, format: { with: CustomRegexp::LASTNAME, message: "2-10位中英文、数字" } validates :gender, presence: true, numericality: { only_integer: true }, inclusion: { in: [0, 1] } validates :location, presence: true validates :location_city, presence: true diff --git a/app/libs/custom_regexp.rb b/app/libs/custom_regexp.rb index d7afc61ed..2a2a99384 100644 --- a/app/libs/custom_regexp.rb +++ b/app/libs/custom_regexp.rb @@ -1,4 +1,6 @@ module CustomRegexp PHONE = /1\d{10}/ - EMAIL = /^[a-zA-Z0-9]+([._\\]*[a-zA-Z0-9])*@([a-z0-9]+[-a-z0-9]*[a-z0-9]+.){1,63}[a-z0-9]+$/ + EMAIL = /\A[a-zA-Z0-9]+([._\\]*[a-zA-Z0-9])*@([a-z0-9]+[-a-z0-9]*[a-z0-9]+.){1,63}[a-z0-9]+\z/ + LASTNAME = /\A[a-zA-Z0-9\u4e00-\u9fa5]+\z/ + NICKNAME = /\A[\u4e00-\u9fa5_a-zA-Z0-9]+\z/ end \ No newline at end of file diff --git a/db/migrate/20191204030230_migrate_exercise_single_question_score.rb b/db/migrate/20191204030230_migrate_exercise_single_question_score.rb new file mode 100644 index 000000000..c71fea157 --- /dev/null +++ b/db/migrate/20191204030230_migrate_exercise_single_question_score.rb @@ -0,0 +1,27 @@ +class MigrateExerciseSingleQuestionScore < ActiveRecord::Migration[5.2] + def change + # 删除判断、单选题中生成多条记录,但exercise_choice_id不同的数据 + sql = %Q(delete from exercise_answers where (exercise_question_id, user_id) in + (select * from (select exercise_question_id, user_id from exercise_answers join exercise_questions eq on exercise_question_id = eq.id where eq.question_type in (0, 2) group by exercise_question_id, user_id having count(*) > 1) a) + and id not in (select * from (select min(exercise_answers.id) from exercise_answers join exercise_questions eq on exercise_question_id = eq.id where eq.question_type in (0, 2) group by exercise_question_id, user_id having count(*) > 1 order by exercise_answers.id) b)) + ActiveRecord::Base.connection.execute sql + + # 更新成绩 + exercise_answers = ExerciseAnswer.joins(:exercise_question).where(score: -1, exercise_questions: {question_type: [0, 2]}) + exercise_answers.includes(:exercise_choice, exercise_question: :exercise_standard_answers).find_each do |answer| + + question = answer.exercise_question + exercise_user = ExerciseUser.find_by(exercise_id: question.exercise_id, user_id: answer.user_id) + + if exercise_user && exercise_user.commit_status == 1 + user_choice_position = answer.exercise_choice&.choice_position + if user_choice_position && (user_choice_position.to_i == question.exercise_standard_answers.take&.exercise_choice_id.to_i) + answer.update!(score: question.question_score) + score = exercise_user.score + question.question_score + objective_score = exercise_user.objective_score + question.question_score + exercise_user.update!(score: score, objective_score: objective_score) + end + end + end + end +end