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