ネストされたフォームに問題がありました。私のコントローラーは:
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」のようなものを使用すると、うまく機能します。では、必要な数の製品を追加できる動的フォームを作成するにはどうすればよいでしょうか?
皆さんありがとう!