50

私のレールアプリでは、データを保存するために、サーバーへの ajax リクエストがあります。これは以前は問題なく動作していましたが、現在はエラーが発生します。

ActionController::UnknownFormat (ActionController::UnknownFormat):
  app/controllers/reservations_controller.rb:45:in `create'

以下は、コントローラーと、データ型が JSON であることを宣言する JavaScript ファイルです。

class ReservationController < ApplicationController

  respond_to :html, :json

  def create
    ...
    respond_to do |format|
      if @reservation.save
        format.html do
          redirect_to '/'
        end
        format.json { render json: @reservation.to_json }
      else
        render 'new'
      end
    end # respond_to
  end # create 
end # ReservationController

関数.js

$.ajax({
        url: url_link,
        dataType: 'json',
        type: 'POST',
        data: dataToSend
      })

完全なエラー ログは次のとおりです。

Completed 406 Not Acceptable in 45ms

ActionController::UnknownFormat (ActionController::UnknownFormat):
app/controllers/bookings_controller.rb:45:in `create'

Rendered /Users/tiagovieira/.rvm/gems/ruby-2.0.0-p451/gems/actionpack-4.0.0/lib/action_dispatch/middleware/templates/rescues/_source.erb (0.5ms)
Rendered /Users/tiagovieira/.rvm/gems/ruby-2.0.0-p451/gems/actionpack-4.0.0/lib/action_dispatch/middleware/templates/rescues/_trace.erb (0.8ms)
Rendered /Users/tiagovieira/.rvm/gems/ruby-2.0.0-p451/gems/actionpack-4.0.0/lib/action_dispatch/middleware/templates/rescues/_request_and_response.erb (0.8ms)
Rendered /Users/tiagovieira/.rvm/gems/ruby-2.0.0-p451/gems/actionpack-4.0.0/lib/action_dispatch/middleware/templates/rescues/diagnostics.erb within rescues/layout (9.6ms)
4

6 に答える 6

30

config/routes.rb ファイルを次のように変更することもできます。

 get 'ajax/:action', to: 'ajax#:action', :defaults => { :format => 'json' }

デフォルトのフォーマットはjsonになります。Rails 4でうまく機能しています。

または、さらに進んで名前空間を使用している場合は、重複を削減できます。

namespace :api, defaults: {format: 'json'} do
   #your controller routes here ...
end

上記の場合、以下のすべて/apiがデフォルトでjsonとしてフォーマットされます。

于 2015-02-26T19:14:01.160 に答える
4

この問題は私に発生し、追加するだけで解決しました

 respond_to :html, :json

ApplicationController ファイルに

Github で Devise の問題を確認できます: https://github.com/plataformatec/devise/issues/2667

于 2017-06-18T12:47:02.297 に答える
1

同様のエラーが発生したため、この投稿が気に入っています。だから私はあなたのコントローラーのような最初の行を追加しました Respond_to :html, :json

その後、別のエラーが発生しました(以下を参照)

コントローラー レベルのrespond_to' feature has been extracted to theレスポンダーの gem。この機能を引き続き使用するには、Gemfile に追加してください: gem 'responders', '~> 2.0' 詳細については、Rails アップグレード ガイドを参照してください。しかし、それはそれとは何の関係もありませんでした。

于 2015-02-04T02:14:33.040 に答える