4

認証にDeviseを使用してRails 3.2.11アプリケーションをセットアップしました。mvc フレームワークとしてember.jsを使用したいと考えています。

POST /users.json ルートへの ajax 呼び出しを開始すると、406 Not Acceptable が表示されます。

これが私のajax呼び出しです:

urlBase : '/users'

signup : (username, email, password, passwordConfirmation) ->
  $.ajax
    url: "#{@.get('urlBase')}.json"
    type: "POST"
    dataType: "json"
    data:
      "user[username]": username
      "user[email]": email
      "user[password]": password
      "user[password_confirmation]": passwordConfirmation

    success: (data) ->
      alert('Completed sign up process: '+ JSON.stringify(data));
      @errorMsg = "Signed up successfully." 

    error: (jqXHR, textStatus, errorThrown) ->
      alert "Error completing sign up: " + textStatus + " error: " + errorThrown

ログは次のとおりです。

Started POST "/users.json" for 127.0.0.1 at 2013-01-14 14:38:57 +0100
Processing by Devise::RegistrationsController#create as JSON
  Parameters: {"user"=>{"username"=>"obo", "email"=>"obo@obo.dv", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}}
   (1.3ms)  begin transaction
  User Exists (1.3ms)  SELECT 1 AS one FROM "users" WHERE "users"."email" = 'obo@obo.dv' LIMIT 1
   (0.1ms)  rollback transaction
Completed 406 Not Acceptable in 311ms (ActiveRecord: 2.6ms)

なぜこれが起こるのかわかりません。

4

2 に答える 2

4

どのバージョンの Devise を使用していますか?

先週、誤って Devise 2.2.0 にアップグレードした後、同様の問題に遭遇しました。そのバージョンには、デフォルトでDeviseControllerのみ応答するようにする変更など、下位互換性のない変更がいくつかありました。HTMLなどの追加の形式を追加JSONすると、問題が解決するはずです。

Github の changelog でDevise の変更について読んでください。それをしたくない場合は、Devise 2.1.2 にダウングレードしてみてください。

于 2013-01-14T14:17:00.383 に答える
2

Zajn の回答では、DeviseController が HTML 形式にのみ応答するようになったと説明しています (バージョン 2.2.0 以降)。変更ログには、JSON 形式を DeviseController.respond_to に追加するように記載されています。

SessionsController と RegistrationsController をサブクラス化し、 Respond_to :json を追加しました。

class RegistrationsController < Devise::RegistrationsController
  respond_to :json
end

class SessionsController < Devise::RegistrationsController
  respond_to :json
end
于 2013-01-14T14:52:28.840 に答える