Reputation: 25032
I am creating a nested form and using Ryan Bates Railscast. I am creating a typical form that uses a partial.
= form_for(@project, :html => { :class => 'addProjectForm' }) do |f|
...
%p
= f.fields_for :crew_members do |crew|
#fields
= render 'crew_member_fields', :m => crew
= link_to_add_fields "Add Crew Members", f, :crew_members
%p
I then a call a helper class to be able to clone the "fields" class and add it to my form.
module ProjectsHelper
def link_to_add_fields(name, f, association)
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(association.to_s.singularize + "_fields", :f => builder)
end
link_to_function(name, h("add_fields(this, \"#{association}\", \"#{escape_javascript(fields)}\")"))
end
end
The helper class then calls a javascript function to handle the details.
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));
}
My issue is when I add the
= link_to_add_fields "Add Crew Members", f, :crew_members
line, I get the error
undefined local variable or method `m' for #<#<Class:0xa763964>:0xa761588>
Extracted source (around line #1):
1: = m.label "Crew Member Name"
2: = m.label "Crew Member Role"
3: %br
4: = m.text_field :name
This makes it seem like the partial is not getting the builder variable, but if I do not have the
= link_to_add_fields "Add Crew Members", f, :crew_members
line, then the partial displays just fine. I am confused on how to debug next. Sorry for the long post, but I want you to have all the information. Thanks for the help.
Upvotes: 0
Views: 914
Reputation: 4394
I think you have a typo in the helper.
module ProjectsHelper
def link_to_add_fields(name, f, association)
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(association.to_s.singularize + "_fields", :f => builder)
end
link_to_function(name, h("add_fields(this, \"#{association}\", \"#{escape_javascript(fields)}\")"))
end
end
render(association.to_s.singularize + "_fields", :f => builder)
should be
render(association.to_s.singularize + "_fields", :m => builder)
Upvotes: 1