2016-11-13 234 views
1

我有一個rails API應用程序,我用Devise gem進行用戶管理。我從設計寶石創建了一個用戶模型。之後,我注意到在rake routes命令中列出了兩條相同的路由。我想POST (/users)先致電api/v1/users#create行動,然後致電devise/registrations#createRails相同的路線(POST /用戶)爲不同的控制器操作[設計]

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或curl調用api/v1/users#create來創建用戶模型,然後調用devise/registrations#create來註冊用戶?

我不是100%確定如何設計的作品,所以這裏的任何幫助將有所幫助。

這是我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

請您發表您的**'配置/ routes.rb' **文件? –

+0

您的rails版本請,也只是想知道什麼類型的請求你打這個方法,例如json,html等,請張貼您的路由文件也@millin –

+0

我正在做json請求,因爲我可以創建一個API @ ManojMenon –

回答

1

因此,使用Rails路由的事情是,當你的請求,路由,因爲它們是在routes.rb定義從上到下檢查。

現在,當您通過POSTMAN發出請求時,/users路徑與通過devise_for生成的路徑相匹配,因爲它是文件中的第一行。

現在,當你正在編寫控制器的測試,你是不是真的訪問/users,你只是告訴api/v1/users_controller調用create方法,這勢必會擊中api/v1/users#create

現在,這樣你可以解決這個衝突是通過改變什麼來命名它的路由。如果你做這樣的事情:

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 
... 
相關問題