Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
class NestedAttributesForStrategy
def association(runner)
runner.run
end
def result(evaluation)
evaluation.object.tap do |instance|
evaluation.notify(:after_build, instance)
return attributes(instance)
end
end
private
def attributes(instance)
attrs = instance.attributes.delete_if do |k, _|
%w(id type created_at updated_at).include?(k)
end
nested_reflections(instance).each do |ref|
attrs.merge!("#{ref.name}_attributes" => instance.send(ref.name).map do |nested_obj|
attributes(nested_obj)
end)
end
attrs
end
def nested_reflections(instance)
instance._reflections.values.select do |ref|
ref.macro == :has_many && instance.respond_to?("#{ref.name}_attributes=")
end
end
end
@ccmcbeck
Copy link

ccmcbeck commented Feb 13, 2015

Thanks for fixing. This works great in conjunction with this has_many factory pattern -- http://stackoverflow.com/a/19011173/207353

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment