RoR:通过jQuery,远程调用删除表单字段

时间:2012-10-29 00:58:41

标签: jquery ruby-on-rails

我在使用jQuery remove()函数从表单中删除某些字段时遇到一些问题。在视图中我有一个表格。此表单具有一些用于某些子元素的循环字段集。用户可以删除每个集。我在我的控制器中使用远程调用destroy方法,该方法使用jquery调用js文件,该jquery将淡出并删除相关字段集的div。

我的问题是虽然对象被破坏并且div很好地淡出,但是字段仍然处于活动状态,因此在发布表单时显然会出错。

我试图添加一个fieldset标记,除了div之外还删除它,并且还试图禁用整个fieldset,但结果是一样的。字段仍在发布(并且由于对象已被销毁,因此返回错误)。

这是视图的相关部分

- i = 0             # a bit crude, see if can make index count more Railsy
= f.simple_fields_for :fund_levels do |fl|
   %div{id: "flheader-#{fl.object.id}"}
     %div
       = link_to "Sponsor levels", "#", :class => "show_hide", :id => "initiator1_fl#{i}", :style=>"margin-bottom:2px;", :onclick=>"return false"
     %div{:class => "slidingDiv #{fund_levels_last?(i, @fund_level_count) ? "shown": "hidd" } whitebg leftadj", :id=>"body_fl#{i}", :style=>"width:100%;" }
       = fl.input :title
       = fl.input :description
       = fl.input :maxnumber
       = fl.input :price
       %div{:style => "float: right; padding: 20px 20px 20px 0"}
         = fund_levels_last?(i, @fund_level_count) ? ( link_to "add new level", ad, {class: 'button orange sm'} ) : ( link_to "remove", accounts_ad_fund_level_path(ad, fl.object.id), {:class => 'button orange sm', :method => :delete, :remote => true, :confirm => t('q.are_you_sure')} )
       - i += 1

这是jQuery调用

$('#flheader-<%= @fundlevel.id %>').fadeOut(300, function() { $(this).remove(); });

正如我所说,该对象被成功销毁并且div淡出。我只需要弄清楚如何在发布时完全从页面中删除已删除的对象(字段集)。

编辑:问题似乎是simple_fields_for在每个循环开始时立即生成一个隐藏的ID字段。这意味着ID字段实际上位于正被销毁的div之外,因此正在发布。关于如何强制隐藏的id字段在DIV中的任何想法?

1 个答案:

答案 0 :(得分:0)

好的,经过几个小时的研究后,我解决了这个问题。

首先 - 为了避免在循环div之外打印对象ID,必须手动将对象id包含为隐藏字段。完成后,simple_forms将不会自动包含它,因此您可以将它放在您想要的位置。

此外,有必要对主表单控制器进行更改,以允许allow_destroy和reject_if values.all为空。