我的模型Post
has_many :relics
和Relic
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
答案 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中。