diff --git a/lib/forest_liana/collection.rb b/lib/forest_liana/collection.rb index 0a86a48f..c76000ec 100644 --- a/lib/forest_liana/collection.rb +++ b/lib/forest_liana/collection.rb @@ -84,6 +84,7 @@ def field(name, opts, &block) if serializer_name && ForestLiana::UserSpace.const_defined?( serializer_name) + compute_value = nil ForestLiana::UserSpace.const_get(serializer_name).class_eval do if block # NOTICE: Smart Field case. @@ -104,6 +105,18 @@ def field(name, opts, &block) attribute(name) end end + + # In case of smart field declare on STI class + # the smart field was added on these subclasses + unless active_record_class.subclasses.empty? + active_record_class.subclasses.each do |subclass| + if ForestLiana::UserSpace.const_defined?(serializer_name_for(subclass)) + ForestLiana::UserSpace.const_get(serializer_name_for(subclass)).class_eval do + attribute(name, &compute_value) + end + end + end + end end end @@ -205,6 +218,13 @@ def serializer_name end end + def serializer_name_for(subclass) + component_prefix = ForestLiana.component_prefix(subclass) + serializer_name = "#{component_prefix}Serializer" + + "ForestLiana::UserSpace::#{serializer_name}" + end + def serializer_name_for_reference(reference) association = opts[:reference].split('.').first component_prefix = association.classify