2010-11-19 55 views
30

我不知道這是爲什麼不工作,我學習的軌道,我下面的一本書,它說,像這樣做:的Rails的form_for:遠程=>真不調用JS方法

<%= 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 %> 

但是它不工作,當我檢查的螢火請求的URL不結束在.js文件,你有什麼想法,爲什麼?

+0

可以根據控制器方法(例如,索引,創建,新建)和相關的視圖文件,所以我們可以看到整個圖像? – Ingo 2011-06-04 16:43:09

回答

-11

變化:

[@article,@article.comments.new ] 

@article 

我建議你閱讀相關章節的API:http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html

+2

ryudice正在尋找一篇關於ryudice文章的新評論表。 ryudice的form_for調用是ryudice想要的正確語法。對於標準的文章表單,您的建議將會很好。這很令人困惑,因爲上下文從未被陳述過。 – natedavisolds 2011-06-04 23:56:37

32

當您檢查螢火蟲提出的要求,只是因爲網址並沒有以.js結尾,這並不意味着它不是從javascript調用的。要驗證您是否應該檢查請求標頭以查看Accept參數是什麼。如果它說「應用程序/ JavaScript」,那麼它都很好。

其次,開始嘗試當一個非常普遍的問題:遠程=>真的是需要的JavaScript庫不包含在你的代碼。所以我的猜測是,下面的代碼是從您的佈局丟失:

<%= javascript_include_tag :defaults %> 
<%= csrf_meta_tag %> 

如果是這樣的話,就包括它的佈局<head>標籤內。

+0

您的意思是「html header」模板的頭標籤,其中的form/link與remote:true是? – Timo 2014-05-18 06:29:55

+0

是的,謝謝你指出。這並不清楚。但是,是的,它應該包含在裏面標籤 – DanneManne 2014-05-20 04:26:32

21

最有可能發生的事情是,你錯過了rails.js文件,它處理的是你,無論你是使用原型或jQuery的。

如果您正在使用jQuery的,最簡單的方式獲得使用jquery-rails寶石所有所需的文件。這將添加一個生成器來安裝jquery和所需的rails.js。

類型有點像你的Rails應用程序根目錄內:

rails g jquery:install 

,然後裏面你application.html.erb添加一行

<%= javascript_include_tag :defaults %> 

或明確的(不要忘了單獨包括您的jQuery):

<%= javascript_include_tag :rails, :application %> 

[編輯:for Rails 3.1或更高版本使用資產管道]

使用jquery-rails寶石(如上所述),並添加以下行app/assets/javascripts/application.js(如果它們不存在的話):

//= require jquery 
//= require jquery_ujs 

希望這有助於!

+0

它工作良好..謝謝.. – Neo 2011-11-30 13:16:20

+0

我們有這個問題,但我們包括'jquery_ujs.js'來解決它。 – 2012-11-30 00:33:52

+0

是的,真的,它改變了一些軌道3.1和資產管道。我更新了我的答案以反映這一點。 – nathanvda 2012-11-30 01:25:52

4

檢查控制器:它有一個respond_to代碼塊?

如果您生成您的應用程序與軌道產生支架,它會像

respond_to do |format| 
     format.html 
     format.xml { .... } 
    end 

如果它確實有它,只是把整個塊出來,從respond_to代碼結束;又或者用單線

respond_to :html, :js 

,或者是附加在這裏

respond_to do |format| 
     format.html 
     format.js 
     format.xml { .... } 
    end 

所示要麼應該在你的情況下工作,多餘的線或者編輯塊更換整個模塊。

4

檢查/app/assets/javascript/application.js文件

應當包括以下文件在那裏。 jquery_ujs負責工作remote=> true功能。

require `jquery` 
require `jquery_ujs` 

快樂編碼!

+1

在第11.2章迭代F2:創建基於AJAX的購物車時,我在使用Rails進行'敏捷Web開發'時遇到了類似的新手問題。這個問題可以通過在列出的文件中取消註釋'= require jquery'來解決。希望這有助於其他人。 – 2016-02-24 07:33:52

+0

這就是偉大的@cppinitiator! – 2016-02-25 11:53:39

6

當您還沒有添加jquery_ujs文件時會發生此錯誤。你只包含了jquery文件。

因此,您需要在您查看或要求他們在的application.js或者您正在使用特定佈局任何其他文件手動添加這兩個文件。

根據您的情況,您可以按照第1或第2解決方案。

第一溶液:

<%= javascript_include_tag :jquery, :jquery_ujs %> 

第二溶液:

  1. 既需要的jqueryjquery_ujs在應用程序/資產 /的application.js

    //= require jquery.js 
    
    //= require jquery_ujs 
    
  2. 將application.js文件包含在您的特定佈局文件中。

    <%= javascript_include_tag :application %> 
    

注:

同時添加CSRF標記在佈局文件兩種解決方案。

<%= csrf_meta_tag %> 

我想你在你的Gemfile中有下面的代碼,並且已經安裝了這個Gem。

gem 'jquery-rails' 
+0

第二個解決方案解決了我的問題! – 2016-02-24 07:34:50

相關問題