lib/avo/fields/belongs_to_field.rb in avo-3.10.10 vs lib/avo/fields/belongs_to_field.rb in avo-3.11.0

- old
+ new

@@ -123,11 +123,11 @@ if attach_scope.present? query = Avo::ExecutionContext.new(target: attach_scope, query: query, parent: get_record).handle end query.all.map do |record| - [resource.new(record: record).record_title, record.id] + [resource.new(record: record).record_title, record.to_param] end end def database_value target_resource.id @@ -202,17 +202,23 @@ valid_model_class = valid_polymorphic_class params[:"#{polymorphic_as}_type"] record.send(:"#{polymorphic_as}_type=", valid_model_class) # If the type is blank, reset the id too. - if valid_model_class.blank? + id_from_param = params["#{polymorphic_as}_id"] + + if valid_model_class.blank? || id_from_param.blank? record.send(:"#{polymorphic_as}_id=", nil) else - record.send(:"#{polymorphic_as}_id=", params["#{polymorphic_as}_id"]) + record_id = target_resource(record:, polymorphic_model_class: value.safe_constantize).find_record(id_from_param).id + + record.send(:"#{polymorphic_as}_id=", record_id) end else - record.send(:"#{key}=", value) + record_id = value.blank? ? value : target_resource(record:).find_record(value).id + + record.send(:"#{key}=", record_id) end record end @@ -229,22 +235,22 @@ foreign_key rescue id end - def target_resource + def target_resource(record: @record, polymorphic_model_class: value&.class) @target_resource ||= if use_resource.present? use_resource elsif is_polymorphic? - if value.present? - get_resource_by_model_class(value.class) + if polymorphic_model_class.present? + get_resource_by_model_class(polymorphic_model_class) else return nil end else reflection_key = polymorphic_as || id - reflection_object = @record._reflections.with_indifferent_access[reflection_key] + reflection_object = record.class.reflect_on_association(reflection_key) if reflection_object.klass.present? get_resource_by_model_class(reflection_object.klass.to_s) elsif reflection_object.options[:class_name].present? get_resource_by_model_class(reflection_object.options[:class_name])