Javascript Rails:如何在编辑表单中至少显示一个表单部分
接下来,我能够在我的表单中实现一个有效的添加/删除功能 问题是当我删除最后一个表单部分、提交和编辑表单时。表单部分为空,仅显示“+添加更多”链接(因为我在提交表单时删除了其他链接?) 默认情况下,我使用了Javascript Rails:如何在编辑表单中至少显示一个表单部分,javascript,ruby-on-rails,forms,Javascript,Ruby On Rails,Forms,接下来,我能够在我的表单中实现一个有效的添加/删除功能 问题是当我删除最后一个表单部分、提交和编辑表单时。表单部分为空,仅显示“+添加更多”链接(因为我在提交表单时删除了其他链接?) 默认情况下,我使用了@userprofile.programs.build,因此表单在第一次创建时会构建一个程序节 userprofiles\u controller.rb def new @userprofile = Userprofile.new(params[:userprofile]) @userp
@userprofile.programs.build
,因此表单在第一次创建时会构建一个程序节
userprofiles\u 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>
假设您有以下HTML--我添加了几个类: _form.html.erb
<div class="programs-form">
<h3>Programs</h3>
<div class="programs-fields">
<%= f.fields_for :programs do |builder| %>
<%= render 'program_fields', f: builder %>
<% end %>
</div>
<div class="field">
<%= link_to_add_fields "+ Add More", f, :programs %>
</div>
</div>
我还没有机会设置测试环境并运行此代码,所以如果您有任何问题,请告诉我——我非常乐意修复任何bug 假设您有以下HTML——我添加了几个类: _form.html.erb
<div class="programs-form">
<h3>Programs</h3>
<div class="programs-fields">
<%= f.fields_for :programs do |builder| %>
<%= render 'program_fields', f: builder %>
<% end %>
</div>
<div class="field">
<%= link_to_add_fields "+ Add More", f, :programs %>
</div>
</div>
我还没有机会设置测试环境并运行此代码,所以如果您有任何问题,请告诉我——我非常乐意修复任何bug 在我发布答案之前,我想确保我理解你的问题。所以当只有一个字段时,你想隐藏“删除”链接吗?当有两个或更多的字段时,你想显示它,对吗?是的,我认为这是解决我一直遇到的问题的一种方法。问题是当我删除程序段(所有字段-因为即使是第一个程序段也有“删除”链接)并提交表单时。当我去编辑表单时,程序部分不会显示任何字段,我认为这些字段是从submit.Gotcha保存的。那么,我会发布一个答案。在发布答案之前,我想确保我理解了你的问题。所以当只有一个字段时,你想隐藏“删除”链接吗?当有两个或更多的字段时,你想显示它,对吗?是的,我认为这是解决我一直遇到的问题的一种方法。问题是当我删除程序段(所有字段-因为即使是第一个程序段也有“删除”链接)并提交表单时。当我去编辑表单时,程序部分不会显示任何字段,我认为这些字段是从submit.Gotcha保存的。然后我会发布一个答案。我已经在我的问题中添加了一个编辑,并包括了
userprofiles.js.coffee
。我不知道如何将我所拥有的与jQuery结合起来。但是我将你的脚本单独添加到文件中。我注意到的一个问题是,当我填写多个程序部分时,保存并返回编辑。所有填写的部分都没有“删除”链接。但当我编辑其中一个部分时,所有程序部分都会显示“删除”链接,包括第一个部分。我想这是因为长度>1
。是否可以确保第一个表单部分从不显示“删除”链接?或者,如果所有内容都已删除,则“用户更新”将返回编辑表单。如果上一次没有保存程序节,那么默认情况下编辑生成一个程序节吗?我在问题中添加了一个编辑,并包括了userprofiles.js.coffee
。我不知道如何将我所拥有的与jQuery结合起来。但是我将你的脚本单独添加到文件中。我注意到的一个问题是,当我填写多个程序部分时,保存并返回编辑。所有填写的部分都没有“删除”链接。但当我编辑其中一个部分时,所有程序部分都会显示“删除”链接,包括第一个部分。我想这是因为长度>1
。是否可以确保第一个表单部分从不显示“删除”链接?或者,如果所有内容都已删除,则“用户更新”将返回编辑表单。如果上一个版本中没有保存程序节,则默认情况下编辑生成一个程序节?
<div class="programs-form">
<h3>Programs</h3>
<div class="programs-fields">
<%= f.fields_for :programs do |builder| %>
<%= render 'program_fields', f: builder %>
<% end %>
</div>
<div class="field">
<%= link_to_add_fields "+ Add More", f, :programs %>
</div>
</div>
<fieldset class="program">
<%= 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>
$(function () {
$('a.remove_fields').hide();
$('.programs-fields').on('change', function (ev) {
if ($('fieldset.program').length > 1) {
$('a.remove_fields').show();
}
});
});