удалить_поля и добавить ссылку на поле, не работающую во вложенной форме в рельсах 3.0.9

Я слежу за эпизодами 1 и 2 Райана Бейтса neted_forms из рельсов, я уже реализовал функциональность вложенных форм в одном из моих проектов раньше, и он работает нормально без каких-либо ошибок, но в моем новом проекте я использую ту же ссылку из рельсов приведения, но поле удаления и добавления не работает.

Вот моя модель

has_many :contacts, :dependent => :destroy
accepts_nested_attributes_for :contacts, :reject_if => lambda { |a| a[:contact_name].blank? },     :allow_destroy => true

Форма, в которой я использую ссылку добавления поля

       <div class="TabbedPanelsContent">
            <%= f.fields_for :contacts do |builder| %>
            <%= render "contact_fields", :f => builder %>
            <% end %>
        <p><%= link_to_add_fields "Add Contact", f, :contacts %></p>

          </div>

Партиал для контактов

<div class="fields">
<p class="lable">Contact Name</p>
<p class="field"><%= f.text_field :contact_name %></p></br>

<p class="lable">Mobile Number</p>
<p class="field"><%= f.text_field :contact_mobile_number %></p></br>

<p class="lable">Email Address</p>
<p class="field"><%= f.text_field :contact_email %></p></br>
<p><%= link_to_remove_fields "remove", f %></p> </div>

Помощник приложения я написал этот метод

 # Method for removing fields
def link_to_remove_fields(name, f)
    f.hidden_field(:_destroy) + link_to_function(name, "remove_fields(this)")
  end

# Method for Adding fields

  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, "add_fields(this, \"#{association}\", \"#{escape_javascript(fields)}\")")
  end

Приложение .js выглядит следующим образом

function remove_fields(link) {
  $(link).previous("input[type=hidden]").value = "1";
  $(link).up(".fields").hide();
 }

 function add_fields(link, association, content) {
 var new_id = new Date().getTime();
 var regexp = new RegExp("new_" + association, "g")
 $(link).up().insert({
 before: content.replace(regexp, new_id)
 });
}

Используя firebug, я обнаружил одну проблему в html, которая генерируется при выполнении этого кода.

<p><input type="hidden" value="false" name="customer[contacts_attributes][1][_destroy]"   id="customer_contacts_attributes_1__destroy"><a onclick="remove_fields(this); return false;" href="#">remove</a></p>

В приведенном выше коде значение = "ложь" может создавать проблему, и оно должно быть значением = "1", поскольку мой предыдущий код генерирует значение = "1". может ли кто-нибудь помочь мне в вышеуказанном вопросе?


person Anup    schedule 15.12.2011    source источник


Ответы (2)


Поместите этот js в файл application.js

function remove_fields(link) {
$(link).prev("input[type=hidden]").val("1");
$(link).closest(".fields").hide (); }

function add_fields (ссылка, ассоциация, контент) { var new_id = new Date().getTime(); var regexp = новое регулярное выражение ("new_" + ассоциация, "g"); $(ссылка).parent().before(content.replace(regexp, new_id)); }

person SSR    schedule 09.01.2014

У меня были проблемы с удалением, пока я не добавил :allow_destroy => true в свою родительскую модель.

person Daniel Cairol    schedule 21.03.2012