1

私のクライアント アプリは JSON でエンコードされた POST を Rails サーバーに送信しますが、サーバーは 406 エラーを表示し、json に応答しません。

ユーザーコントローラーの作成

# POST /users
# POST /users.json
def create
  @user = User.new(params[:user])

  respond_to do |format|
    if @user.save
      format.html { redirect_to @user, notice: 'User was successfully created.' }
      format.json { render json: @user, status: :created, location: @user }
    else
      format.html { render action: "new" }
      format.json { render json: @user.errors, status: :unprocessable_entity }
    end
  end
end

Rails コンソール:

Started POST "/users.json" for 127.0.0.1 at 2013-05-21 16:38:47 +0100
Processing by Devise::RegistrationsController#create as JSON
  Parameters: {"user"=>{"name"=>"", "available"=>"true", "email"=>"", "sex"=>"male", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}}
WARNING: Can't verify CSRF token authenticity
   (0.2ms)  begin transaction
  User Exists (0.3ms)  SELECT 1 AS one FROM "users" WHERE "users"."email" = '' LIMIT 1
   (0.2ms)  rollback transaction
Completed 406 Not Acceptable in 773ms (ActiveRecord: 6.1ms)

誰でも私を助けることができますか?

4

2 に答える 2

3

誰かがそれを見た場合に備えて、しばらくしてからこれに答えようとします。コントローラーの下部にフォーマットオプションとしてJSONしかない場合でも、この問題に何度も遭遇しました(例のように):

respond_to do |format|
  format.json { render json: @user, status: :created, location: @user }
end

$.getJSONJSONデータ型で呼び出すリクエストで明示的に呼び出す場合でも。

私が見つけたトリックは、ページ名に .json を付けて呼び出すことでした。

 $.getJSON('controllername-your-calling.json?', function(json){
      //do your stuff...
 });

多分それは誰かを助けるでしょう。

于 2013-11-09T20:35:07.190 に答える
0

respond_to :json, only: [:create]コントローラーの上部に追加する必要があります。respond_to :htmlHTML を使用するアクションを追加する必要がある場合があります。

于 2013-05-21T16:26:56.827 に答える