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])