Skip to content

Instantly share code, notes, and snippets.

@DylanLacey
Created May 12, 2011 07:16
Show Gist options
  • Save DylanLacey/968083 to your computer and use it in GitHub Desktop.
Save DylanLacey/968083 to your computer and use it in GitHub Desktop.
module ApplicationHelper
def link_to_remove_fields(name, f)
f.hidden_field(:_destroy) + link_to_function(name, "remove_fields(this)")
end
def link_to_add_fields(name, f, association, options)
render_object = options[:partial] || association.to_s.singularize + "_fields"
new_object = f.object.class.reflect_on_association(association).klass.new
fields = f.fields_for(association, new_object, :child_index => "new_#{association}") do |builder|
render(render_object, :f => builder)
end
link_to_function(name, h("add_fields(this, \"#{association}\", \"#{escape_javascript(fields)}\")"))
end
end
function add_fields(link, association, content) {
var new_id = new Date().getTime();
var regexp = new RegExp("new_" + association, "g")
$(link).parent().before(content.replace(regexp, new_id));
}
FROM the view:
<%= link_to_add_fields("New Pickup", f, :pickup_addresses, :partial => '/waypoints/waypoint') %>
<a href="#" onclick="add_fields(this, &amp;quot;pickup_addresses&amp;quot;, &amp;quot; &amp;lt;table&amp;gt;&amp;lt;div class=\&amp;quot;field\&amp;quot;&amp;gt;\n &amp;lt;label for=\&amp;quot;job_pickup_addresses_attributes_new_pickup_addresses_location_name\&amp;quot;&amp;gt;Location name&amp;lt;\/label&amp;gt;&amp;lt;br /&amp;gt;\n &amp;lt;input id=\&amp;quot;job_pickup_addresses_attributes_new_pickup_addresses_location_name\&amp;quot; name=\&amp;quot;job[pickup_addresses_attributes][new_pickup_addresses][location_name]\&amp;quot; size=\&amp;quot;30\&amp;quot; type=\&amp;quot;text\&amp;quot; /&amp;gt;\n&amp;lt;\/div&amp;gt;\n\n&amp;lt;div class=\&amp;quot;h1\&amp;quot;&amp;gt;\n Street Details\n&amp;lt;\/div&amp;gt;\n\n\n &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;div class=\&amp;quot;field\&amp;quot;&amp;gt;\n &amp;lt;label for=\&amp;quot;job_pickup_addresses_attributes_new_pickup_addresses_number\&amp;quot;&amp;gt;Number&amp;lt;\/label&amp;gt;&amp;lt;br /&amp;gt;\n &amp;lt;input id=\&amp;quot;job_pickup_addresses_attributes_new_pickup_addresses_street_number\&amp;quot; name=\&amp;quot;job[pickup_addresses_attributes][new_pickup_addresses][street_number]\&amp;quot; size=\&amp;quot;30\&amp;quot; type=\&amp;quot;text\&amp;quot; /&amp;gt;\n&amp;lt;\/div&amp;gt;&amp;lt;\/td&amp;gt;\n\n&amp;lt;td&amp;gt;&amp;lt;div class=\&amp;quot;field\&amp;quot;&amp;gt;\n &amp;lt;label for=\&amp;quot;job_pickup_addresses_attributes_new_pickup_addresses_name\&amp;quot;&amp;gt;Name&amp;lt;\/label&amp;gt;&amp;lt;br /&amp;gt;\n &amp;lt;input id=\&amp;quot;job_pickup_addresses_attributes_new_pickup_addresses_street_name\&amp;quot; name=\&amp;quot;job[pickup_addresses_attributes][new_pickup_addresses][street_name]\&amp;quot; size=\&amp;quot;30\&amp;quot; type=\&amp;quot;text\&amp;quot; /&amp;gt;\n&amp;lt;\/div&amp;gt;&amp;lt;\/td&amp;gt;\n\n&amp;lt;td&amp;gt;&amp;lt;div class=\&amp;quot;field\&amp;quot;&amp;gt;\n &amp;lt;label for=\&amp;quot;job_pickup_addresses_attributes_new_pickup_addresses_type\&amp;quot;&amp;gt;Type&amp;lt;\/label&amp;gt;&amp;lt;br /&amp;gt;\n &amp;lt;input id=\&amp;quot;job_pickup_addresses_attributes_new_pickup_addresses_street_type\&amp;quot; name=\&amp;quot;job[pickup_addresses_attributes][new_pickup_addresses][street_type]\&amp;quot; size=\&amp;quot;30\&amp;quot; type=\&amp;quot;text\&amp;quot; /&amp;gt;\n&amp;lt;\/div&amp;gt;&amp;lt;\/td&amp;gt;\n &amp;lt;\/tr&amp;gt;\n&amp;lt;\/table&amp;gt;\n\n &amp;lt;div&amp;gt;\n &amp;lt;label for=\&amp;quot;job_pickup_addresses_attributes_new_pickup_addresses_order\&amp;quot;&amp;gt;Order&amp;lt;\/label&amp;gt;&amp;lt;br /&amp;gt;\n &amp;lt;input id=\&amp;quot;job_pickup_addresses_attributes_new_pickup_addresses_order\&amp;quot; name=\&amp;quot;job[pickup_addresses_attributes][new_pickup_addresses][order]\&amp;quot; size=\&amp;quot;30\&amp;quot; type=\&amp;quot;text\&amp;quot; /&amp;gt;\n &amp;lt;\/div&amp;gt;\n &amp;lt;div&amp;gt;\n &amp;lt;label for=\&amp;quot;job_pickup_addresses_attributes_new_pickup_addresses_purpose\&amp;quot;&amp;gt;Purpose&amp;lt;\/label&amp;gt;&amp;lt;br /&amp;gt;\n &amp;lt;select id=\&amp;quot;job_pickup_addresses_attributes_new_pickup_addresses_purpose\&amp;quot; name=\&amp;quot;job[pickup_addresses_attributes][new_pickup_addresses][purpose]\&amp;quot;&amp;gt;&amp;lt;option value=\&amp;quot;PICK UP\&amp;quot;&amp;gt;Pick Up&amp;lt;\/option&amp;gt;\n&amp;lt;option value=\&amp;quot;SET DOWN\&amp;quot;&amp;gt;Drop Off&amp;lt;\/option&amp;gt;&amp;lt;\/select&amp;gt;\n &amp;lt;\/div&amp;gt;\n&amp;quot;); return false;">New Pickup</a>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment