Created
May 12, 2011 07:16
-
-
Save DylanLacey/968083 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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, &quot;pickup_addresses&quot;, &quot; &lt;table&gt;&lt;div class=\&quot;field\&quot;&gt;\n &lt;label for=\&quot;job_pickup_addresses_attributes_new_pickup_addresses_location_name\&quot;&gt;Location name&lt;\/label&gt;&lt;br /&gt;\n &lt;input id=\&quot;job_pickup_addresses_attributes_new_pickup_addresses_location_name\&quot; name=\&quot;job[pickup_addresses_attributes][new_pickup_addresses][location_name]\&quot; size=\&quot;30\&quot; type=\&quot;text\&quot; /&gt;\n&lt;\/div&gt;\n\n&lt;div class=\&quot;h1\&quot;&gt;\n Street Details\n&lt;\/div&gt;\n\n\n &lt;tr&gt;&lt;td&gt;&lt;div class=\&quot;field\&quot;&gt;\n &lt;label for=\&quot;job_pickup_addresses_attributes_new_pickup_addresses_number\&quot;&gt;Number&lt;\/label&gt;&lt;br /&gt;\n &lt;input id=\&quot;job_pickup_addresses_attributes_new_pickup_addresses_street_number\&quot; name=\&quot;job[pickup_addresses_attributes][new_pickup_addresses][street_number]\&quot; size=\&quot;30\&quot; type=\&quot;text\&quot; /&gt;\n&lt;\/div&gt;&lt;\/td&gt;\n\n&lt;td&gt;&lt;div class=\&quot;field\&quot;&gt;\n &lt;label for=\&quot;job_pickup_addresses_attributes_new_pickup_addresses_name\&quot;&gt;Name&lt;\/label&gt;&lt;br /&gt;\n &lt;input id=\&quot;job_pickup_addresses_attributes_new_pickup_addresses_street_name\&quot; name=\&quot;job[pickup_addresses_attributes][new_pickup_addresses][street_name]\&quot; size=\&quot;30\&quot; type=\&quot;text\&quot; /&gt;\n&lt;\/div&gt;&lt;\/td&gt;\n\n&lt;td&gt;&lt;div class=\&quot;field\&quot;&gt;\n &lt;label for=\&quot;job_pickup_addresses_attributes_new_pickup_addresses_type\&quot;&gt;Type&lt;\/label&gt;&lt;br /&gt;\n &lt;input id=\&quot;job_pickup_addresses_attributes_new_pickup_addresses_street_type\&quot; name=\&quot;job[pickup_addresses_attributes][new_pickup_addresses][street_type]\&quot; size=\&quot;30\&quot; type=\&quot;text\&quot; /&gt;\n&lt;\/div&gt;&lt;\/td&gt;\n &lt;\/tr&gt;\n&lt;\/table&gt;\n\n &lt;div&gt;\n &lt;label for=\&quot;job_pickup_addresses_attributes_new_pickup_addresses_order\&quot;&gt;Order&lt;\/label&gt;&lt;br /&gt;\n &lt;input id=\&quot;job_pickup_addresses_attributes_new_pickup_addresses_order\&quot; name=\&quot;job[pickup_addresses_attributes][new_pickup_addresses][order]\&quot; size=\&quot;30\&quot; type=\&quot;text\&quot; /&gt;\n &lt;\/div&gt;\n &lt;div&gt;\n &lt;label for=\&quot;job_pickup_addresses_attributes_new_pickup_addresses_purpose\&quot;&gt;Purpose&lt;\/label&gt;&lt;br /&gt;\n &lt;select id=\&quot;job_pickup_addresses_attributes_new_pickup_addresses_purpose\&quot; name=\&quot;job[pickup_addresses_attributes][new_pickup_addresses][purpose]\&quot;&gt;&lt;option value=\&quot;PICK UP\&quot;&gt;Pick Up&lt;\/option&gt;\n&lt;option value=\&quot;SET DOWN\&quot;&gt;Drop Off&lt;\/option&gt;&lt;\/select&gt;\n &lt;\/div&gt;\n&quot;); return false;">New Pickup</a> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment