如何在Rails中通过JS动态添加新的嵌套字段?

时间:2014-06-23 11:18:32

标签: javascript jquery ruby-on-rails

我的模型Post has_many :relicsRelic belongs_to :post。我有新的帖子形式,我可以在那里创建Post的遗物(多个)(它有效):

来自new的{​​{1}}行动:

posts_controller.rb

来自@post_relics = [@post.relics.build]*2

_form.html.haml

我的目标是添加“添加更多”按钮,该按钮将提供= f.fields_for :relics, @post_relics do |r| .more.group .photo = link_to 'Insert photo', '#', data: {toggle: 'upload'} = r.file_field :photo, accept: 'image/*' .fileds = r.label :title = r.text_field :title = r.label :description = r.text_field :description div的副本以及有效的输入名称和ID,我该怎么做?

上面的代码呈现在:

.more

3 个答案:

答案 0 :(得分:0)

这是使用jQuery的快速解决方案:http://jsfiddle.net/M4b9D/9/

function addMore() {
    var newdiv = $(".more_group:last").clone();
    var newid = Number(newdiv.attr('id').replace(/post_relics_attributes_(\d+)/, "$1")) + 1;

    newdiv.attr('id', "post_relics_attributes_" + newid)

    $.each(newdiv.find(":input"), function() {
      var thisname = $(this).attr('id');
       thisname = thisname.replace(/\d+/, newid);

       $(this).attr('name', thisname);
       $(this).attr('id', thisname);
       $(this).val('');
     });

    $("#groups").append(newdiv);

}

基本上,它只是创建一组div中最后一个div的副本,并更新该div中每个输入的id / names /值。我对你的元素的命名方式进行了一些调整,使得编写这一点变得更容易了,并添加了一个组div,因此可以添加新的div。

答案 1 :(得分:0)

某些用户给出了正确答案,但有人删除了答案 - 太糟糕了。答案是使用Cocoon gem,其中所有内容都已实现。

答案 2 :(得分:0)

您可以使用nested_form宝石。例如,在此article中。