2016-11-13 9 views
1

私はユーザー管理のためにDevise gemを使用しているレールapiアプリケーションを持っています。私はdevise gemからユーザーモデルを作成しました。その後、私はrake routesコマンドに2つの同じルートがリストされていることに気付きました。 POST (/users)に最初にapi/v1/users#createアクションを呼び出してから、devise/registrations#createに電話してほしい。異なるコントローラのアクションのための同じルート(POST/users)のレール[Devise]

user_registration POST /users(.:format)  devise/registrations#create 
api_users POST   /users(.:format)  api/v1/users#create {:format=>:json} 

私はusers_controller_specファイルを使用してPOST (/users)をテストする場合、api/v1/users#createアクションが呼び出されます。しかし、POSTMANを使用してPOST (/users)を実行すると、ログにはdevise/registrations#createアクションが代わりに呼び出されることが示されます。

POST (/users)私はPOSTMANまたはカールを使用してapi/v1/users#createを最初に呼び出してユーザーモデルを作成し、devise/registrations#createを呼び出してユーザーを登録するにはどうすればよいですか?

私は、どのように掘り下げがうまくいくかを100%確信していないので、ここの助けが役に立ちます。

これは私のあなたが要求を行うときには、上から下へroutes.rbで定義されているようconfig/routes.rb

Rails.application.routes.draw do 
    devise_for :users 
    # Api definition 
    namespace :api, defaults: { format: :json }, path: '/' do 
    scope module: :v1, constraints: ApiConstraints.new(version: 1, default: true) do 
     # We are going to list our resources here 
     resources :users, only: [:show, :create, :update, :destroy] 
     resources :sessions, only: [:create, :destroy] 
    end 
    end 
end 
+0

あなたは**の 'config/routes.rb'を投稿してくださいだろう**ファイル? –

+0

あなたのレールのバージョンも、このメソッドに当たっているリクエストのタイプ、例えばjson、htmlなどを知りたいのですが、あなたのルートファイルも@millinに投稿してください。 –

+0

私はAPIを作成することができるので、 ManojMenon –

答えて

1

ので、Railsのルートを持つ事は、ルートがチェックされています。

POSTMANでリクエストすると、ファイルの最初の行であるので、のパスとdevise_forで生成されたパスが一致します。

あなたがコントローラのテストを書いているとき今、あなたは本当にあなたがちょうど今api/v1/users#create

を打つためにバインドされてcreate方法、道あなたを呼び出すためにapi/v1/users_controllerを言っている、/usersにアクセスしていませんこの矛盾を解決できるのは、deviseのルート名を変更することです。あなたはこのような何かを行う場合は、次の

Rails.application.routes.draw do 
    devise_for :users, path: 'customer' 
    # Api definition 
    namespace :api, defaults: { format: :json }, path: '/' do 
    scope module: :v1, constraints: ApiConstraints.new(version: 1, default: true) do 
     # We are going to list our resources here 
     resources :users, only: [:show, :create, :update, :destroy] 
     resources :sessions, only: [:create, :destroy] 
    end 
    end 
end 

これは工夫ルートがどうなるかである。

 new_user_session GET /customer/sign_in(.:format)  devise/sessions#new 
     user_session POST /customer/sign_in(.:format)  devise/sessions#create 
destroy_user_session DELETE /customer/sign_out(.:format)  devise/sessions#destroy 
     user_password POST /customer/password(.:format)  devise/passwords#create 
    new_user_password GET /customer/password/new(.:format) devise/passwords#new 
    edit_user_password GET /customer/password/edit(.:format) devise/passwords#edit 
... 
関連する問題