次のコントローラーコードがあります。
def create
@admin = Admin.new(params[:admin])
respond_to do |format|
if @admin.save
redirect_to(@admin, :notice => 'Admin was successfully created.')
else
render :action => "new"
end
end
end
def update
@admin = Admin.find(params[:id])
respond_to do |format|
if @admin.update_attributes(params[:admin])
redirect_to(admin_admins_path, :notice => 'Admin was successfully updated.')
else
render :action => "edit"
end
end
end
および次のルート:
admin_admins GET /admin/admins(.:format) {:action=>"index", :controller=>"admin/admins"}
admin_admins POST /admin/admins(.:format) {:action=>"create", :controller=>"admin/admins"}
new_admin_admin GET /admin/admins/new(.:format) {:action=>"new", :controller=>"admin/admins"}
edit_admin_admin GET /admin/admins/:id/edit(.:format) {:action=>"edit", :controller=>"admin/admins"}
admin_admin GET /admin/admins/:id(.:format) {:action=>"show", :controller=>"admin/admins"}
admin_admin PUT /admin/admins/:id(.:format) {:action=>"update", :controller=>"admin/admins"}
admin_admin DELETE /admin/admins/:id(.:format) {:action=>"destroy", :controller=>"admin/admins"}
さて、ちょっと奇抜な名前付けは別として-リダイレクトは常に406 Not Acceptableになります。何が間違っているのでしょうか?
削除する respond_to do |format|
ブロック。応答する形式を指定していないため、 format.html { #your code here }
。 respond_to のドキュメントを適切に使用する方法を確認してください。
同様のエラーが発生しました。コントローラーはJSONにのみ応答していました。テストが機能するためにもHTMLに応答する必要がありました(これは理にかなっています)。
class AdsController < ApplicationController
respond_to :json, :html
実行しようとしたときにエラーを受け取りました:assert_redirected_to ad_url(ad)
本番環境にデプロイした後にこの問題が発生し始めましたが、開発では困難なすべてがうまく機能していました。
約15分の時間の無駄の後、最終的にview.file(index.html.erbなど)をコミットするのを忘れていましたであることがわかりました。
サーバー上でtail -f log/production.log
を使用すると明らかになりました:FATAL -- : ActionController::UnknownFormat (SomeController#index is missing a template for this request format and variant.
開発では、明らかにビューファイルが存在したため、エラーは発生しませんでした。