Skip to content

Instantly share code, notes, and snippets.

Created June 3, 2014 02:13
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save anonymous/94f9a8944bf002fc550e to your computer and use it in GitHub Desktop.
Save anonymous/94f9a8944bf002fc550e to your computer and use it in GitHub Desktop.
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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment