【问题标题】:Remote form in Rails not resettingRails 中的远程表单未重置
【发布时间】:2012-03-07 00:28:24
【问题描述】:

不知道为什么会这样,但是通过 JS(使用 JQuery)提交表单后,它并没有重置。

_problem_form.erb

<%= form_for [@industry, @problem], "id" => "problem_form", :remote => true  do |f| %>
  //fields
<% end %>

create.js.erb

<% if @problem.errors.any? %>
  $("#errors").html("<%= escape_javascript(render :partial => 'layouts/error_messages', :locals => {:object => @problem })%>");
<% else %>
  $("#problem_form_area").html("<%= escape_javascript(render :partial=> 'problems/problem_form') %>");
  $(".problem_area").html("<%= escape_javascript(render @problems) %>");
  $("#problem_form")[0].reset();
<% end %>

POST 请求已发送,我可以看到一切正常更新。表格只是没有重置。

真正奇怪的是,通常在一个成功的 POST 之后,所有的资产都会被获取。但是,这一次,服务器只是挂在了

在 132 毫秒内完成 200 次 OK(查看次数:88.0 毫秒 | ActiveRecord:2.5 毫秒)

并且日志没有表明对我的 CSS 或 JS 文件有任何 GET。

附带说明,如果我再次单击提交按钮(在第一次 POST 之后并且没有刷新页面),我会收到以下消息:

在 2012 年 3 月 6 日开始为 127.0.0.1 放置“/industries/1/problems/71” 18:49:51 -0500

AbstractController::ActionNotFound(动作“更新”不能 为 ProblemsController 找到):

渲染 /Users/hansy/.rvm/gems/ruby-1.9.2-p290/gems/actionpack-3.1.1/lib/action_dispatch/middleware/templates/rescues/unknown_action.erb 在救援/布局内(0.6ms

所以,不知道为什么我的表单将方法从 POST 转换为 PUT。

有什么建议吗?

【问题讨论】:

  • 什么是#problem_form_area?您不需要将@problem 发送到 $("#problem_form_area").html(" 'problems/problem_form') %&gt;"); 吗?

标签: jquery forms ruby-on-rails-3.1


【解决方案1】:

第一次提交会创建一个新的问题记录(由 POST 请求完成)。

同样的@problem 被发送回视图。所以现在表单将更新该记录(由 PUT 请求完成)

【讨论】:

  • 哦,这当然有道理!我该如何避免这种情况?该表格位于其他模型的(行业)显示页面(问题嵌套在行业中)。如何让@problem 回到等于Problem.new(:industry =&gt; @industry) 而不是从最近的记录中结转?
  • 我可能应该只重定向到该页面,但是我的验证似乎无法正常工作:(.
  • 如果您能解释为什么需要 :remote => true,那么我可以提出一些建议。此外,它看起来像 :industry :has_many :problems 并且您正在查看行业页面。因此,如果您有一个 form_for :industry 和 nested_attributes_for :problems 会更好,并且您的 IndustryController#update 应该会根据 @industry.update_attributes (params[:industry]) 自动为该行业创建一个新问题。请查看 formtastic、client_side_validations、slim - 美妙的宝石!
  • 原来我没有使用remote=>true,但是我的表单有几个字段,如果其中一个或多个没有通过验证,整个表单会被重置。我想在页面重置后维护已验证的字段,但问题是,重定向到显示页面后对象丢失了。
猜你喜欢
  • 2016-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-12
  • 2012-05-22
  • 1970-01-01
  • 1970-01-01
  • 2012-02-28
相关资源
最近更新 更多