Remove_fields & add field link не работает на вложенной форме в rails 3.0.9 - PullRequest
3 голосов
/ 15 декабря 2011

Я слежу за Райаном Бейтсом, эпизодом 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

Файл application.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>

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

Ответы [ 2 ]

1 голос
/ 09 января 2014

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

функция remove_fields (ссылка) {
$ (Ссылка) .prev ( "вход [тип = скрытый]") Val ( "1");.
$ (Ссылка) .closest ( "поле".) Скрывать (). }

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

0 голосов
/ 21 марта 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...