![](/img/trans.png)
[英]ActionController::UnknownFormat error with Ajax request in Rails 6.0.1
[英]Ruby on Rails - Issues with AJAX (ActionController:UnknownFormat)
我是Ruby on Rails的初學者,所以如果問題很明顯,我深表歉意。 我目前正在從事一個名為Gradebook的項目。 在Gradebook的一頁上,我一直在研究一種功能,用戶可以單擊“新建類別”,並且將在div中呈現一個表單,該表單將允許用戶輸入有關類別的信息,然后保存更改后,類別將顯示在屏幕上。 所有這些都將使用AJAX發生。
這是我的思考過程:
我向視圖添加一個提交按鈕,該按鈕將觸發類別控制器上的“新”操作。 我使用remote:true,因此頁面不會重定向到/ category / new。 我在將要呈現類別表單的表單底部創建一個div。
... <%= form_for :category, url: new_gradebook_category_path, remote: true do |f| %> <%= f.submit 'New Category' %> <% end %> ... <div id="category_form"></div>
在類別控制器中,我創建一個新類別並指定我只想產生一個javascript響應:
def new @category = Category.new respond_to do |format| format.js end end
我在類別文件夾中創建“ new.js.erb”,該文件夾將負責在div中呈現我的類別表單:
$('#category_form').html("<%= j (render 'newcategory') %>");
我創建了_newcategory.html.erb,它是實際的形式:
<%= form_for :category, url: gradebook_category_index_path, remote: true do |f| %> <p> <%= f.label :category_name, "Category Name"%><br> <%= f.text_field :category_name %> </p> <p> <%= f.label :category_description, "Category Description"%><br> <%= f.text_area :category_description %> </p> <p> <%= f.submit, "Create Category" %> </p> <% end %>
我的問題是,當用戶單擊“新建類別”按鈕時,什么也沒有發生。 我查看了Javascript控制台,發現找不到“ new.js.erb”:
當我在新選項卡中打開此鏈接時,我得到了ActionController:UnknownFormat:
這是我嘗試過的所有方法:
我嘗試更改:
respond_to do |format| format.js end
對此:
respond_to do |format| format.html format.js end
我已經讀過使用“ format.js”作為唯一響應會產生此錯誤。 但是,這只是給我“缺少模板類別/新”。 盡管我不必指定new.html.erb,但因為我希望它是AJAX響應,所以我希望它保留在同一頁面上。
我曾嘗試刪除tmp文件夾,但這沒有用。
我使用“ File.exists?”檢查文件是否存在,它們確實存在。
我檢查以確保服務器沒有將其解釋為HTML,並根據服務器輸出:
Started POST "/gradebook/2/category/new" for 127.0.0.1 at 2014-10-16 16:43:02 -0700 Processing by ApplicationController#routing_error as JS Parameters: {"utf8"=>"✓", "commit"=>"New Category", "path"=>"gradebook/2/category/new"} Rendered public/404.html (0.1ms) Completed 404 Not Found in 12ms (Views: 11.3ms | ActiveRecord: 0.0ms)
它被解釋為Javascript文件,但是確實顯示“ ApplicationController#routing_error”,但是我無法理解此路由錯誤發生的位置。
在這一點上,我不確定是什么問題。 我覺得這個問題非常明顯,但是Rails服務器的行為就像是javascript文件都不存在。 任何幫助將非常感激。 非常感謝。
是的,這是因為如果您在屏幕快照中查看,您會看到這是動作POST( form_for
自動使用POST方法),但是rails處理帶有“新”(如GET)的請求。 如果您輸入rake routes
或bundle exec rake routes
您將發現您的操作為GET。 您可以直接在表單中將其設置為操作GET而不是POST:
form_for :category, url: new_gradebook_category_path, method: :get, remote: true do |f|
希望對您有所幫助
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.