diff options
| author | Zog | 2018-04-25 11:15:31 +0200 |
|---|---|---|
| committer | Johan Van Ryseghem | 2018-04-25 15:46:33 +0200 |
| commit | 0f0be7d01a87c64f30539205379e4d7588f6d73e (patch) | |
| tree | 11e5af8797ee3cbc3807b5f62877323333a5f029 /app/models | |
| parent | a0567f40c0ad57abcf630d97816e38f73750138e (diff) | |
| download | chouette-core-0f0be7d01a87c64f30539205379e4d7588f6d73e.tar.bz2 | |
Refs #6669; delay the custom fields initialization until the workgroup is loaded
Diffstat (limited to 'app/models')
| -rw-r--r-- | app/models/concerns/custom_fields_support.rb | 24 | ||||
| -rw-r--r-- | app/models/custom_field.rb | 8 |
2 files changed, 28 insertions, 4 deletions
diff --git a/app/models/concerns/custom_fields_support.rb b/app/models/concerns/custom_fields_support.rb index fd872cc62..6e744d550 100644 --- a/app/models/concerns/custom_fields_support.rb +++ b/app/models/concerns/custom_fields_support.rb @@ -17,7 +17,7 @@ module CustomFieldsSupport end def method_missing method_name, *args - if method_name =~ /custom_field_*/ && method_name.to_sym != :custom_field_values && !@custom_fields_initialized + if !@custom_fields_initialized && method_name =~ /custom_field_*/ && method_name.to_sym != :custom_field_values initialize_custom_fields send method_name, *args else @@ -35,21 +35,37 @@ module CustomFieldsSupport end def custom_field_values= vals - out = {} - custom_fields.each do |code, field| - out[code] = field.preprocess_value_for_assignment(vals.symbolize_keys[code.to_sym]) + if custom_fields_initialized? + out = {} + custom_fields.each do |code, field| + out[code] = field.preprocess_value_for_assignment(vals.symbolize_keys[code.to_sym]) + end + @custom_fields_values_initialized = true + else + out = vals end write_attribute :custom_field_values, out end + def custom_fields_initialized? + !!@custom_fields_initialized + end + + def custom_fields_values_initialized? + !!@custom_fields_values_initialized + end + def initialize_custom_fields + return if custom_fields_initialized? return unless self.attributes.has_key?("custom_field_values") + return unless self.workgroup.present? self.custom_field_values ||= {} custom_fields.values.each &:initialize_custom_field custom_fields.each do |k, v| custom_field_values[k] ||= v.default_value end @custom_fields_initialized = true + self.custom_field_values = self.custom_field_values unless custom_fields_values_initialized? end def custom_field_value key diff --git a/app/models/custom_field.rb b/app/models/custom_field.rb index b5c08465d..15aee9a41 100644 --- a/app/models/custom_field.rb +++ b/app/models/custom_field.rb @@ -147,6 +147,10 @@ class CustomField < ApplicationModel @raw_value&.to_i end + def preprocess_value_for_assignment val + val&.to_i + end + def validate @valid = true return if @raw_value.is_a?(Fixnum) || @raw_value.is_a?(Float) @@ -167,6 +171,10 @@ class CustomField < ApplicationModel end end + def preprocess_value_for_assignment val + val + end + def display_value return unless value k = options["list_values"].is_a?(Hash) ? value.to_s : value.to_i |
