Rails嵌套表单构建

时间:2013-06-07 16:51:44

标签: ruby-on-rails nested-forms

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

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'我在视图中添加的每个新项目(产品)。如果我使用'3times @ encomenda.encomenda_produtos.build'之类的东西,效果很好。 那么,我应该怎么做一个动态表单,我可以添加我想要的产品呢?

全部谢谢!

2 个答案:

答案 0 :(得分:1)

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

Multiple non-nested model creation on same page

使用此代码,没有进行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
  });

在UsersController中:

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

希望这有帮助!

答案 1 :(得分:0)

我是新手,对我而言nested_form gem像黄油一样工作,没有任何头痛 看看这个nested_form