Rails - Railscasts вложенные сложные формы - PullRequest
0 голосов
/ 20 ноября 2010

Я использую Ryan Bates 'Complex Forms Deep Branch * и пытаюсь скопировать этот пример для формы, имеющей два дополнительных вложенных уровня.

SurveyName имеет много SurveyQuestions, которые имеют много SurveyOptions.

# application_helper (identical to deep branch)
def remove_child_link(name, f)  
  f.hidden_field(:_destroy) + link_to_function(name, "remove_fields(this)")  
end

def add_child_link(name, f, method)  
  fields = new_child_fields(f, method)  
  link_to_function(name, h("insert_fields(this, \"#{method}\", \"#  {escape_javascript(fields)}\")"))
end  

def new_child_fields(form_builder, method, options = {})  
  options[:object] ||= form_builder.object.class.reflect_on_association(method).klass.new  
  options[:partial] ||= method.to_s.singularize  
  options[:form_builder_local] ||= :f  
  form_builder.fields_for(method, options[:object], :child_index => "new_#{method}") do |f|  
    render(:partial => options[:partial], :locals => { options[:form_builder_local] => f })  
  end  
end

# application.js (identical to deep branch)
function insert_fields(link, method, content) {
  var new_id = new Date().getTime();
  var regexp = new RegExp("new_" + method, "g")
  $(link).up().insert({
    before: content.replace(regexp, new_id)
  });
}
function remove_fields(link) {
  var hidden_field = $(link).previous("input[type=hidden]");
  if (hidden_field) {
    hidden_field.value = '1';
  }
  $(link).up(".fields").hide();
}

В Deep Branch, Project имеет много задач, которые имеют много назначений. Мой _task.html.erb эквивалент составляет:

<div class="fields">
  <%= remove_child_link "remove", f %> 
  <%= f.fields_for :survey_options do |survey_option_form| %>
    <%= render :partial => "survey_option", :locals => { :f => survey_option_form } %>
  <% end %>
  # the above works
  <%= add_child_link "Add Option", f, :survey_options %>
  # the above line does NOT work
</div>

Надеюсь, я дал достаточно информации. Меня удивляет, что с таким же вспомогательным кодом функция add_child_link не будет работать. Ты видишь, чего мне не хватает?

1 Ответ

0 голосов
/ 20 ноября 2010

Вы не добавили код javascript в ваш application.js.

...