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