Rails 3远程重新提交带有动态字段的表单

时间:2012-09-12 13:33:39

标签: ruby-on-rails-3 ruby-on-rails-3.2

我有一张remote => true的表单。当我第一次提交它时,一切都运作良好。

如果有任何错误,我想在此表单中添加新字段。我用update.js.erb做了这个。

问题是,当我重新提交此表单时,结果js文件呈现为html(即我在屏幕上看到js文件文本)。这是第一次呈现为js的update.js.erb文件...

知道我错过了什么吗?

更新: 在第一次尝试时,格式为:

format
=> #<ActionController::MimeResponds::Collector:0xc61711c
 @order=[text/javascript],
 @responses={text/javascript=>nil}>

在第二次提交时:

format
=> #<ActionController::MimeResponds::Collector:0xceaadec 
@order=[], 
@responses={}>

我的update.js基本上是

$("#checkout_modal").html("<%= escape_javascript(render 'plan_pay_modal')%>"); 

和plan_pay_modal与原始页面上的部分相同(如果有错误,将显示新字段的表单。我也尝试了相同的字段)。

2 个答案:

答案 0 :(得分:1)

原来问题是我通过jquery提交

form$.get(0).submit()

在这种情况下不起作用......为了工作我必须使用

form$.trigger("submit.rails")

rails 3 how do i submit a remote form with jquery and avoid callbacks

答案 1 :(得分:0)

如果您在网络浏览器中看到javascript为内容,则表示您的浏览器发送的请求是普通的html请求,而不是ajax请求。这反过来意味着表单由于某种原因未设置为:remote =&gt;第二次提交时为true。我建议你调查为什么会这样,或者粘贴一些代码,以便我可以进一步帮助你。

您可以通过控制器操作中的响应来验证我所说的内容是否正确:

respond_to do |format|  
  format.html  { raise "Request is not ajax based!" }
  format.js { render 'update' }
end 

编辑:

第二篇文章看起来并不正确,因此update.js.erb可能会以不能正常工作的方式修改表单。为什么不渲染以前在模态中的相同内容。换句话说,最初在页面上显示模态中的部分,然后update.js.erb只是重新呈现部分并替换模态内容。如果存在错误,您可以在部分中使用if来激活添加的新动态字段。