2016-10-19 13 views
0

Railsの5.0.0.1
ルビー2.3.0p0406 ActionController :: UnknownFormat [考案] [RailsのAPI]

私はCRUD RailsのAPIを構築しようとしていますし、私がやってトラブルを抱えていますポスト。私はユーザー管理のためにdevise gemを使用しています。私はここに何かを逃していますか

私はポストマンthorugh POSTを作成しようとすると、私は次の応答を取得するログは、私の知る限り見ることができるように、この

Started POST "https://stackoverflow.com/users/" for 127.0.0.1 at 2016-10-19 02:37:15 -0400 
Processing by Devise::RegistrationsController#create as JSON 
Parameters: {"email"=>"[email protected]", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"} 
(0.1ms) begin transaction 
(0.0ms) rollback transaction 
Completed 406 Not Acceptable in 2ms (ActiveRecord: 0.1ms) 



ActionController::UnknownFormat (ActionController::UnknownFormat): 

    responders (2.3.0) lib/action_controller/respond_with.rb:207:in `respond_with' 
devise (4.2.0) app/controllers/devise/registrations_controller.rb:32:in `create' 
actionpack (5.0.0.1) lib/action_controller/metal/basic_implicit_render.rb:4:in `send_action' 
actionpack (5.0.0.1) lib/abstract_controller/base.rb:188:in `process_action' 
actionpack (5.0.0.1) lib/action_controller/metal/rendering.rb:30:in `process_action' 
actionpack (5.0.0.1) lib/abstract_controller/callbacks.rb:20:in `block in process_action' 
..... 

のように見えます

{ 
    "status": 406, 
    "error": "Not Acceptable", 
    "exception": "#<ActionController::UnknownFormat: ActionController::UnknownFormat>", 
    "traces": { 
    "Application Trace": [], 
    "Framework Trace": [ 
    { 
     "id": 0, 
    "trace": "responders (2.3.0) lib/action_controller/respond_with.rb:207:in `respond_with'" 
    }, 
    { 
     "id": 1, 
    "trace": "devise (4.2.0) app/controllers/devise/registrations_controller.rb:32:in `create'" 
    }, 
    { 
     "id": 2, 
    "trace": "actionpack (5.0.0.1) lib/action_controller/metal/basic_implicit_render.rb:4:in `send_action'" 
    }, 
    { 
     "id": 3, 
    "trace": "actionpack (5.0.0.1) lib/abstract_controller/base.rb:188:in `process_action'" 
    }, 
    ..... 
} 

、user_controllerの私のコードは動作するはずです

アプリ/コントローラ/ API/V1/user_controller.rb

class Api::V1::UsersController < ApplicationController 
    respond_to :json 

    def show 
    respond_with User.find(params[:id]) 
    end 

    def create 
    user = User.new(user_params) 
    if user.save 
     render json: user, status: 201, location: [:api, user] 
    else 
     render json: { errors: user.errors }, status: 422 
    end 
    end 

    private 

    def user_params 
    params.require(:user).permit(:email, :password, :password_confirmation) 
    end 

end 

のconfig/routes.rbを

require 'api_constraints' 

Rails.application.routes.draw do 
    devise_for :users 
# Api definition 
    namespace :api, defaults: { format: :json }, constraints: { subdomain: 'api' }, path: '/' do 
    scope module: :v1, constraints: ApiConstraints.new(version: 1, default: true) do 
     resources :users, :only => [:show, :create] 
    end 
    end 
end 

マイspecファイルは見え

スペック/コントローラ/ APIのような/ V1これは私がテストを実行し、一度得るものです

require 'rails_helper' 

RSpec.describe Api::V1::UsersController, type: :controller do 
    before(:each) { request.headers['Accept'] = "application/vnd.traveltime_test.v1"} 

    describe "GET #show" do 
    before(:each) do 
     @user = FactoryGirl.create :user 
     get :show, params: {id: @user.id}, format: :json 
    end 

    it "returns the information about a reporter on a hash" do 
     user_response = JSON.parse(response.body, symbolize_names: true) 
     expect(user_response[:email]).to eql @user.email 
    end 

    it "respond is successful" do 
     expect(response.status).to eql 200 
    end 
    end 

    describe "POST #create" do 
    before(:each) do 
     @user_attributes = FactoryGirl.create :user 
     post :create, {user: @user_attributes}, format: :json 
    end 

    it "returns json body for the user just created" do 

    end 

    end 
end 

F 

Failures: 

    1) Api::V1::UsersController POST #create returns json body for the user just created 
Failure/Error: params.require(:user).permit(:email, :password, :password_confirmation) 

NoMethodError: 
    undefined method `permit' for "1":String 
     Did you mean? print 
    # ./app/controllers/api/v1/users_controller.rb:19:in `user_params' 
    # ./app/controllers/api/v1/users_controller.rb:8:in `create' 
# /Users/GabBook/.rvm/gems/ruby-2.3.0/gems/devise-4.2.0/lib/devise/test/controller_helpers.rb:33:in `block in process' 
# /Users/GabBook/.rvm/gems/ruby-2.3.0/gems/devise-4.2.0/lib/devise/test/controller_helpers.rb:100:in `catch' 
# /Users/GabBook/.rvm/gems/ruby-2.3.0/gems/devise-4.2.0/lib/devise/test/controller_helpers.rb:100:in `_catch_warden' 
# /Users/GabBook/.rvm/gems/ruby-2.3.0/gems/devise-4.2.0/lib/devise/test/controller_helpers.rb:33:in `process' 
# ./spec/controllers/api/v1/users_controller_spec.rb:25:in `block (3 levels) in <top (required)>' 

Finished in 0.05922 seconds (files took 1.18 seconds to load) 
3 examples, 1 failure 

Failed examples: 

      rspec ./spec/controllers/api/v1/users_controller_spec.rb:28 # Api::V1::UsersController POST #create returns json body for the user just created 

答えて

1

問題はPOSTMANパラメータです。 あなたは投稿:一方

{ "email" => "email", "password" => "password } 

あなたのコントローラは、以下のparamsを期待:

{ "user" => { "email" => "email", "password" => "password" } } 

消毒あなたのparamsで説明したように:

params.require(:user).permit(:email, :password, :password_confirmation) 
1

変更それ

before(:each) do @user_attributes = FactoryGirl.create :user post :create, {user: @user_attributes}, format: :json end

この

before(:each) do @user_attributes = FactoryGirl.create :user post :create, params: {user: @user_attributes}, format: :json end

関連する問題