2011-06-08 52 views
6

我已經到了我的第一個遠程窗體在一個新的軌道3應用程序,我不能讓它提交遠程:它一直提交爲HTML。我在其他rails 3應用程序中完成了這個工作,所以我認爲它一定是我忘記的東西。遠程窗體中的軌道3應用程序提交爲html

這裏是我的形式,我html.erb文件:

 <%= form_for Assignment.new, :remote => true do |f| %> 
     <%= hidden_field_tag "assignment[task_id]", @task.id %> 
     <%= hidden_field_tag "assignment[person_id]", person.id %>    
     <%= submit_tag "Add to task" %> 
     <% end %>  

這裏是它如何呈現出來的頁面上。我已經包含了JavaScript文件鏈接,因爲我有一種感覺,這個問題與js沒有正確設置有關。

<!DOCTYPE html> 
<html lang="en"> 
    <head> 
    <meta charset="utf-8" /> 
    <script src="/javascripts/jquery.js?1306857355" type="text/javascript"></script> 
    <script src="/javascripts/person.js?1306857355" type="text/javascript"></script> 
    <script src="/javascripts/jquery-ui-1.8.11.custom.min.js?1306857355" type="text/javascript"></script> 
    <script src="/javascripts/jquery_ujs.js?1306857355" type="text/javascript"></script> 
    <script src="/javascripts/jquery.ui.datepicker.js?1306857355" type="text/javascript"></script> 
    <script src="/javascripts/jquery.colorbox-min.js?1306857355" type="text/javascript"></script> 
    <script src="/javascripts/jquery.tipTip.minified.js?1306857355" type="text/javascript"></script> 
    <script src="/javascripts/application.js?1306857355" type="text/javascript"></script> 

    <meta name="csrf-param" content="authenticity_token"/> 
    <meta name="csrf-token" content="ErI0bMA1E0JAXwvyVMistPsWc4fg2dG5tDPOgeur358="/> 
    </head> 

    <body class="tasks"> 

    <form accept-charset="UTF-8" action="/assignments" class="new_assignment" data-remote="true" id="new_assignment" method="post"> 
     <div style="margin:0;padding:0;display:inline"> 
     <input name="utf8" type="hidden" value="&#x2713;" /> 
     <input name="authenticity_token" type="hidden" value="ErI0bMA1E0JAXwvyVMistPsWc4fg2dG5tDPOgeur358=" /> 
     </div> 
     <input id="assignment_task_id" name="assignment[task_id]" type="hidden" value="2" /> 
     <input id="assignment_person_id" name="assignment[person_id]" type="hidden" value="1" />    
     <input name="commit" type="submit" value="Add to task" /> 
    </form>  

    </body> 
</html> 

這一切看起來像它正在正確設置。但是,當我提出我在日誌中得到這個通過:

Started POST "/tasks/2" for 127.0.0.1 at 2011-06-08 15:56:42 +0100 
    Processing by TasksController#update as HTML 
    Parameters: {"utf8"=>"✓", "authenticity_token"=>"ErI0bMA1E0JAXwvyVMistPsWc4fg2dG5tDPOgeur358=", "assignment"=>{"task_id"=>"2", "person_id"=>"1"}, "commit"=>"Add to task", "id"=>"2"} 

就像我說的,我想我只是錯過了的東西,我需要做的正確掛接這件事。這裏是我的Gemfile以及相關的情況:

source 'http://rubygems.org' 

gem "rake", "0.8.7" 
gem 'rails', '3.0.7' 
gem 'haml' 
gem 'heroku' 
gem "heroku_backup_task" 
gem 'authlogic', '3.0.2' 
gem 'rails3-generators' 
gem 'txtlocal', :git => 'git://github.com/epigenesys/txtlocal.git' 
gem 'chronic' 
gem 'sqlite3-ruby', :require => 'sqlite3' 
gem 'bcrypt-ruby' 
gem 'taps' #for heroku db import/export 
gem 'jquery-rails', '>= 1.0.3' 
gem 'jrails' 

group :development, :test do 
    gem 'rspec' 
    gem 'mocha' 
    gem "rspec-rails", "~> 2.4" 
    gem 'database_cleaner', '0.5.2' 
    gem 'capybara', :git => 'git://github.com/jnicklas/capybara.git' 
    gem 'selenium-client' 
    gem 'machinist' 
    gem 'faker' 
end 

任何人都可以看到缺少的東西?
謝謝,最大

編輯 - 我的部分愚蠢的錯誤:包含遠程窗體的部分被稱爲從另一個非遠程窗體調用相同的行動。所以外表是由提交按鈕觸發的,而不是內部的遠程觸發器。衛生署。謝謝閱讀。

+0

您的「jquery_ujs.js」與此文件相同:https://github.com/rails/jquery-ujs/blob/master/src/rails.js – 2011-06-08 15:02:58

+0

@dmarkow - 我分辨他們,他們很漂亮非常相似 - 只是幾行有一些區別。我試圖交換他們,但沒有幫助。 – 2011-06-08 15:24:04

+1

您的表單代碼被設置爲發佈到'/ assignments',但是您的日誌摘錄用於更新到'/ tasks/2' ... – 2011-06-08 15:28:21

回答

7

我有同樣的問題,我通過添加:format =>:js到路徑解決。

因此,這將是這個樣子:

<%= form_for :assignment, :url => assignments_path(:format => :js) 
+1

rails 4:<%= form_for @assignment,url:assignments_path,format::js%> – lucianosousa 2014-01-31 20:11:43

0

我遇到了這個問題,以及,雖然出於不同的原因。在我的情況下,這是由於我使用form_tag而不是form_for。後者顯然增加了適當的參數以使呼叫通過Ajax。