Rails form_for:remote => true不调用js方法

ryu*_*ice 33 ruby-on-rails ruby-on-rails-3

我不知道为什么这不起作用,我正在学习rails并且我正在读一本书,它说这样做:

    <%= form_for([@article,@article.comments.new ], :remote=>true, :html => {:style=>'display: none;' }) do |f|%>
    <div class="field">
      <%=    f.label :name %>
      <%=    f.text_field :name %>
    </div>
    <div class="field">
      <%=    f.label :email %>
      <%=    f.text_field :email %>
    </div>
    <div class="field">
      <%=    f.label :body %>
      <%=    f.text_area :body %>
    </div>
    <%= f.submit %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

但它不起作用,当我在firebug中检查请求时,url不会以.js结尾,你有什么想法吗?

Dan*_*nne 34

当你检查在firebug中发出的请求时,仅因为url没有以.js结尾,这并不意味着它不是从javascript调用的.验证是否应检查请求标头以查看Accept参数是什么.如果它说"application/javascript"那么一切都很好.

其次,在开始尝试:remote => true时,一个非常常见的问题是所需的javascript库不包含在您的代码中.所以我的猜测是你的布局中缺少以下代码:

<%= javascript_include_tag :defaults %>
<%= csrf_meta_tag %>
Run Code Online (Sandbox Code Playgroud)

如果是这种情况,只需将其包含在<head>布局的标记内即可.


nat*_*vda 21

最有可能发生的是您丢失了rails.js文件,无论您使用的是原型还是jquery,它都会为您处理.

如果您使用的是jQuery,获取所有需要文件的最简单方法是使用jquery-railsgem.这将添加一个生成器来安装jquery和所需的rails.js.

在rails应用程序根目录中键入类似内容:

rails g jquery:install
Run Code Online (Sandbox Code Playgroud)

然后,在你application.html.erb的内线添加

<%= javascript_include_tag :defaults %>
Run Code Online (Sandbox Code Playgroud)

或明确(不要忘记单独包含您的jquery):

<%= javascript_include_tag :rails, :application %>
Run Code Online (Sandbox Code Playgroud)

[编辑:使用资产管道的Rails 3.1或更高版本]

使用jquery-rails gem(如上所述)并添加以下行app/assets/javascripts/application.js(如果它们不存在):

//= require jquery
//= require jquery_ujs
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助!


Man*_*ava 7

检查你的/app/assets/javascript/application.js文件

它应该包含在那里的文件下面.jquery_ujs负责工作remote=> true功能.

require `jquery`
require `jquery_ujs`
Run Code Online (Sandbox Code Playgroud)

快乐编码!!


Tai*_*aiz 7

如果尚未添加jquery_ujs文件,则会发生此错误.你刚才包含了jquery文件.

因此,您需要在视图中手动添加这两个文件,或者在application.js或您用于特定布局的任何其他文件中要求它们.

根据您的情况,您可以遵循第一或第二个解决方案.

第一解决方案

<%= javascript_include_tag :jquery, :jquery_ujs %>
Run Code Online (Sandbox Code Playgroud)

第二解决方案

  1. app/assets/application.js中同时需要jqueryjquery_ujs

    //= require jquery.js
    
    //= require jquery_ujs
    
    Run Code Online (Sandbox Code Playgroud)
  2. 在您的特定布局文件中包含application.js 文件.

    <%= javascript_include_tag :application %>
    
    Run Code Online (Sandbox Code Playgroud)

注意:

还要在两个解决方案的布局文件中添加csrf标记.

<%= csrf_meta_tag %>
Run Code Online (Sandbox Code Playgroud)

我想你的Gemfile中有以下代码并且已经安装了这个Gem.

gem 'jquery-rails'
Run Code Online (Sandbox Code Playgroud)


小智 -11

改变:

[@article,@article.comments.new ] 
Run Code Online (Sandbox Code Playgroud)

为了

@article
Run Code Online (Sandbox Code Playgroud)

我建议您阅读相关部分的 API:http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html

  • ryudice 希望为 ryudice 所发表的文章提供一个新的评论表。ryudice 的 form_for 调用是 ryudice 想要的正确语法。您的建议对于标准文章形式来说是很好的。这很令人困惑,因为上下文从未被说明。 (2认同)