1

我遇到了嵌套表单的问题。我的控制器是:

def new
    @encomenda = Encomenda.new
    @encomenda.encomenda_produtos.build

    respond_to do |format|
      format.html # new.html.erb
      format.json { render json: @encomenda }
    end
end

我的看法是:

<ul id="invitelist">
  <li>
  <%= f.fields_for :encomenda_produtos do |a| %>
        <%= a.label :id_produto, t("activerecord.attributes.encomenda_produto.produto", :default => "Produto"), :class => :label %>
        <%= a.collection_select :id_produto, Produto.order('nome_produto'), :id_produto, :id_produto, :class => 'collection_select_field' %>
        <br><br>
  <% end %>
  </li>
</ul>

Javascript是:

<script>
    $(document).ready(function() {

        $('#botao_novo_produto').click(function() {
        if ($('#invitelist li').length < 7)
            $('#invitelist li:last').clone().find('input').val('')
            .end().appendTo('#invitelist');
        else
            alert('Número máximo de produtos')
    });

        $('#botao_remove_produto').click(function() {
            if ($('#invitelist li').length > 1)
                $('#invitelist li:last').remove();
            else
                alert('Uma encomenda deve conter ao menos 1 produto.')
        });
    });
</script>

我的问题是我需要在视图中添加的每个新项目(产品)都添加“@encomenda.encomenda_produtos.build”。如果我使用“3.times @encomenda.encomenda_produtos.build”之类的东西,效果很好。那么,我应该怎么做才能拥有一个可以添加任意数量产品的动态表单呢?

谢谢大家!

4

2 回答 2

1

啊,我几天前发布了一个类似的答案:

在同一页面上创建多个非嵌套模型

使用此代码,不会进行 AJAX 调用并且它是动态的(您可以添加任意数量的表单)。

添加字段并仅保留一个表单,一个提交按钮:

= form_tag(url: create_user_path, remote: true) do
  %table
    %tr
      %td= text_field_tag 'user[][first_name]'
      %td= text_field_tag 'user[][last_name]'

    %tr.actions
      %td= submit_tag 'Save'
      %td= button_tag 'Add new user form', id: 'add_user_form'

    %tr.new_user_row.hidden # 'hidden' class matches the css rule: display:none;
      %td= text_field_tag "user[][last_name]"
      %td= text_field_tag "user[][last_name]"

:javascript # jQuery
  $('#add_user_form').bind('click', function(e) {
    var row = $('tr.new_user_row').clone().removeClass('hidden new_user_row');
    $('tr.actions').before(row); # will append the <tr> before the actions
  });

在用户控制器中:

def create
  params[:user].each do |attr|
    User.create(attr)
  end
end

希望这可以帮助!

于 2013-06-07T17:02:11.250 回答
0

我是一个新手,对我来说nested_form gem像黄油一样工作,没有任何头疼查看这个nested_form

于 2013-06-08T04:55:52.140 回答