【发布时间】:2015-10-30 22:01:51
【问题描述】:
我有一个用于添加嵌套对象的表单,如下所示:
这是主要形式:
#purchasing_goals.html.erb
<%= f.fields_for :group_goals do |builder| %>
<%= render partial: 'group_goal_fields', locals: { f: builder } %>
<% end %>
<div>
<%= link_to_add_fields("Add", f, :group_goals) %>
</div>
这是嵌套形式:
<div class="group-goal">
<%= f.text_field :num_of_users, label: "No. Usuarios" %>
<%= f.text_field :discount_percentage, label: "Descuento" %>
<%= f.hidden_field(:_destroy) %>
<%= link_to_remove_fields("Delete", f, "'.group-goal'") %>
</div>
这些是添加和删除 group_goals 项目的助手:
def link_to_remove_fields(name, f, removal_class)
link_to name, "javascript:void(0);", onclick: "remove_fields(this, #{removal_class})"
end
def link_to_add_fields(name, f, association)
new_object = f.object.class.reflect_on_association(association).klass.new
fields = f.fields_for(association, new_object, :child_index => "new_#{association}") do |builder|
render(association.to_s.singularize + "_fields", :f => builder)
end
link_to(name, "javascript:void(0);", onclick: "add_fields(this, \"#{association}\", \"#{escape_javascript(fields)}\")")
end
效果很好,当您单击“添加”按钮时,它会添加一个新项目,但是当我单击“删除”按钮时,它会删除表单中的项目,但不会删除表单的参数,所以当我单击提交按钮一个空的嵌套对象被发送到控制器,我怎样才能使删除按钮不仅在表单中(视觉上)删除项目,而且还删除创建的对象?
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-4 nested-forms