【问题标题】:Rails "remote: true" works with link_to, doesn't work with form_tagRails "remote: true" 适用于 link_to,不适用于 form_tag
【发布时间】:2017-05-30 15:18:15
【问题描述】:

我的 rails 应用程序使用 UJS 到处提交表单,但由于某种原因,我无法让它在这里工作。

我很确定我已经正确设置了 UJS(因为它在其他地方也可以使用):

#application.html.erb
<%= javascript_include_tag 'application' %>

#assets/javascripts/application.js
//= require jquery
//= require jquery_ujs

在我看来,我有一个form_tag 和一个link_to,都设置为remote: true:

<%= form_tag apply_tag_applications_path, remote: true, method: :post do %>
  <%= submit_tag "FORM TAG SUBMIT" %>
<% end %>

<%= link_to apply_tag_applications_path, remote: true, method: :post do %>
  <h1>LINK TO SUBMIT</h1>
<% end %> 

点击link_to按预期工作(请求格式为JS):

Started POST "/tag_applications/apply" for ::1 at 2017-05-30 11:10:51 -0400
Processing by TagApplicationsController#apply as JS

但是点击form_tag会通过HTML提交:

Started POST "/tag_applications/apply" for ::1 at 2017-05-30 11:11:02 -0400
Processing by TagApplicationsController#apply as HTML

谁能提出可能导致第二个无法按预期工作的原因?

【问题讨论】:

  • 你试过form_tag apply_tag_applications_path, method: :post, data: {remote: true}吗?
  • 使用 data: {remote: true} 而不是普通的 remote: true 仍然不能解决问题,但是我注意到在使用您的建议 (data: {remote: true}) 呈现的 HTML 中导致了一个具有真实性的隐藏字段要添加到表单的令牌。根据我上面的问题,我没有看到这个带有代码的隐藏字段。
  • 发布你的路由和控制器代码,以及显示相应的js文件的名称(应该是控制器的动作名称是.js.erb)

标签: ruby-on-rails ujs


【解决方案1】:

确认您在布局或资产中引用了 jquery_ujs 文件。

#application.html.erb
<%= javascript_include_tag :jquery, :jquery_ujs %>

#assets/javascripts/application.js
require jquery.js
require jquery_ujs

此外,远程选项仅在您将对象而不是路径传递给 form_for 时才有效。

这会起作用

<%= form_for @apply_tag, remote: true, method: :post do |f| %>
  <%= f.submit "FORM TAG SUBMIT" %>
<% end %>

【讨论】:

  • 是的,我可以验证这两个参考都已到位(已编辑问题以反映这一点)。
  • 我已经编辑了答案。基本上,当您传递对象而不是路径时,远程选项将起作用。或者您也可以使用 url 选项发送两者。
  • 对不起,这仍然不起作用。以 HTML 格式接收请求:Started POST "/tag_applications" for ::1 at 2017-05-30 11:52:23 -0400Processing by TagApplicationsController#create as HTML
  • 您是否将 form_tag 更改为 form_for?此外,请确保您传递的对象已在控制器中设置。
  • 我的视图:&lt;%= form_for @new_tag, remote: true, method: :post do %&gt; &lt;%= submit_tag "FORM TAG SUBMIT" %&gt; &lt;% end %&gt; 我的控制器包括:@new_tag = TagApplication.new 仍然请求为 HTML
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-16
  • 1970-01-01
  • 1970-01-01
  • 2011-10-18
  • 1970-01-01
相关资源
最近更新 更多