class Para::AttributeField::NestedOneField
Public Instance Methods
parse_input(params, resource)
click to toggle source
Calls superclass method
Para::AttributeField::BelongsToField#parse_input
# File lib/para/attribute_field/nested_one.rb, line 9 def parse_input(params, resource) if (nested_attributes = params[nested_attributes_key]) nested_resource = fetch_or_build_nested_resource_for(resource, nested_attributes) mappings = nested_model_mappings(nested_attributes, nested_resource) mappings.fields.each do |field| field.parse_input(nested_attributes, nested_resource) end params[nested_attributes_key] = nested_attributes else super end end
Private Instance Methods
fetch_or_build_nested_resource_for(parent, attributes)
click to toggle source
Force loading association and look for a resource matching the provided attributes. If no resource is found, one is created and a fake ‘id` is assigned to it to hack Rails’ nested resources lookup from new attributes params.
This is necessary to be able to provide a resource to the parse_input
method when called on the nested resources hash
# File lib/para/attribute_field/nested_one.rb, line 34 def fetch_or_build_nested_resource_for(parent, attributes) if (nested_resource = parent.association(name).load_target) return nested_resource end parent.association(name).build(attributes.slice('type')).tap do |resource| attributes['id'] = "__#{ object_id }" temporarily_extend_new_resource(resource, attributes) end end