diff --git a/app/models/application_form_signup.rb b/app/models/application_form_signup.rb index 9a02333..ca32635 100644 --- a/app/models/application_form_signup.rb +++ b/app/models/application_form_signup.rb @@ -206,7 +206,7 @@ class ApplicationFormSignup return self.cipher_stage_num.index(cipher) end def display_serial_number - display_format_string(self.serial_number,4) + display_format_string(self.serial_number,4) end def display_format_string(num, str_length) return format("%0#{str_length}d", num) @@ -227,28 +227,23 @@ class ApplicationFormSignup all_fields = application_form.application_form_signup_field_sets.map do |set| field_name = set.field_name next if set.disabled || except_fields.include?(field_name) - value = self.send(field_name) rescue nil - localize = self.fields[field_name].options[:localize] + + value = self.respond_to?(field_name) ? self.send(field_name) : nil + field = self.fields[field_name] rescue nil # 先检查字段是否存在 + next if field.nil? # 防止 nil 出现 + + localize = field.options&.dig(:localize) # 安全调用 next if value.nil? && !localize + if field_name == "status" value = I18n.t("application_form.registration_status_#{value}") elsif localize && field_name != "unit" - values = self.send("#{field_name}_translations").select{|k,v| v.present?} - value = "" - if values.count == 0 - next - elsif values.count == 1 - value = values.values.first - else - last_idx = values.count - 1 - values.each_with_index do |(l, v), i| - value += (I18n.t(l) + ": " + v ) - if i != last_idx - value += "
" - end - end - end + values = self.send("#{field_name}_translations").select { |_, v| v.present? } + next if values.empty? + + value = values.map { |l, v| "#{I18n.t(l)}: #{v}" }.join("
") end + { "field_name"=>field_name, "title"=>set.name[locale], @@ -259,44 +254,35 @@ class ApplicationFormSignup field_names = self.class::DefaultEnableFields all_fields = field_names.map do |field_name| next if except_fields.include?(field_name) - value = self.send(field_name) rescue nil - next if value.nil? + + value = self.respond_to?(field_name) ? self.send(field_name) : nil + field = self.fields[field_name] rescue nil + next if field.nil? + field_name_trans = I18n.t("application_form_signup.#{field_name}") + if field_name == "status" - I18n.t("application_form.registration_status_#{value}") - elsif self.fields[field_name].options[:localize] - values = self.send("#{field_name}_translations").select{|k,v| v.present?} - value = "" - if values.count == 0 - next - elsif values.count == 1 - value = values.values.first - else - last_idx = values.count - 1 - values.each_with_index do |(l, v), i| - value += (I18n.t(l) + ": " + v ) - if i != last_idx - value += "
" - end - end - end + value = I18n.t("application_form.registration_status_#{value}") + elsif field.options&.dig(:localize) + values = self.send("#{field_name}_translations").select { |_, v| v.present? } + next if values.empty? + + value = values.map { |l, v| "#{I18n.t(l)}: #{v}" }.join("
") end - { - "field_name"=>field_name, - "title"=> field_name_trans, - "value"=> value - } - end.compact + + { + "field_name" => field_name, + "title" => field_name_trans, + "value" => value + } + end.compact + end application_form.application_form_signup_fields.asc(:_id).each do |rf| - application_form_signup_value = rf.application_form_signup_values.where(:application_form_signup_id=>self.id).last - if application_form_signup_value - value = application_form_signup_value.get_field_value rescue nil - if value - all_fields << value - end - end + value = rf.application_form_signup_values.where(application_form_signup_id: self.id).last&.get_field_value + all_fields << value if value.present? end + return all_fields end end