【发布时间】:2016-06-15 19:15:58
【问题描述】:
在railscasts #196 Nested Model Form 之后,我能够在我的表单中实现一个有效的添加/删除功能。
问题是当我删除最后一个表单部分、提交和编辑表单时。表单部分为空,仅显示“+ 添加更多”链接(因为我在提交表单时删除了其他链接?)。
默认情况下,我使用@userprofile.programs.build,因此表单在第一次创建时会构建一个程序部分。
userprofiles_controller.rb
def new
@userprofile = Userprofile.new(params[:userprofile])
@userprofile.programs.build
end
_form.html.erb
<h3>Programs</h3>
<%= f.fields_for :programs do |builder| %>
<%= render 'program_fields', f: builder %>
<% end %>
<div class="field">
<%= link_to_add_fields "+ Add More", f, :programs %>
</div>
_program_fields.html.erb
<fieldset>
<%= f.select :program_name, [['A'], ['B']], { label: "Program Name: ", :include_blank => "Please select a program...", { class: "form-control" } %>
<%= f.select :program_role, [['Student'], ['Teacher']], { label: "Program Role: ", :include_blank => "Please select your role..." }, { class: "form-control" } %>
<%= f.hidden_field :_destroy %>
<%= link_to "Delete", '#', class: "remove_fields" %>
</fieldset>
当编辑表单为空时,不确定如何或是否需要添加条件并在 userprofiles_controller.rb 中构建?因此,如果整个部分被删除,它仍然默认显示一个表单部分,而不仅仅是一个带有“+ 添加更多”链接的空部分。
或者,如果有某种方式无法删除第一个程序部分。但是其余添加的有“删除”功能?
任何见解都会有所帮助,谢谢!
更新:
userprofiles.js.coffee
$(document).on 'click', 'form .remove_fields', (event) ->
$(this).prev('input[type=hidden]').val('1')
$(this).closest('fieldset').hide()
event.preventDefault()
【问题讨论】:
-
我想确保在发布答案之前了解您的问题。所以你想在只有一个字段时隐藏“删除”链接?那么当有两个或多个字段时,你要显示它,对吗?
-
是的,我认为这将是解决我一直遇到的问题的一种方法。问题是当我删除程序部分(所有字段 - 因为即使第一个程序部分也有“删除”链接)并提交表单时。当我去编辑表单时,程序部分不会显示任何字段,我认为这些字段是从提交中保存的。
-
明白了。那我发个答案吧。
标签: javascript ruby-on-rails forms