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();
     }
  });
});