这与使用任何其他嵌套资源没有什么不同。devise_for
文件中的调用routes.rb
不向用户模型提供 RESTful 路由。考虑一下没有嵌套资源的情况,只需一个标准的 Devise 安装。如果你是你,rake routes
你会得到类似以下的东西:
new_user_session GET /users/sign_in(.:format) devise/sessions#new
user_session POST /users/sign_in(.:format) devise/sessions#create
user_password POST /users/password(.:format) devise/passwords#create
new_user_password GET /users/password/new(.:format) devise/passwords#new
edit_user_password GET /users/password/edit(.:format) devise/passwords#edit
sign_in GET /sign_in(.:format) devise/sessions#new
这对索引或显示用户没有任何帮助,因此您仍然需要为此添加路由:
resources :users, only: [:index, :show]
现在你得到:
users GET /users(.:format) users#index
user GET /users/:id(.:format) users#show
好的,现在我们到了某个地方,然后它只是添加了嵌套资源,而 Devise 一直不介意。
resources :users, only: [:index, :show] do
resources :plans
end
为您提供所需的资源丰富的路由
user_plans GET /users/:user_id/plans(.:format) plans#index
POST /users/:user_id/plans(.:format) plans#create
new_user_plan GET /users/:user_id/plans/new(.:format) plans#new
edit_user_plan GET /users/:user_id/plans/:id/edit(.:format) plans#edit
user_plan GET /users/:user_id/plans/:id(.:format) plans#show
PUT /users/:user_id/plans/:id(.:format) plans#update
DELETE /users/:user_id/plans/:id(.:format) plans#destroy
这就是它的全部。设计在这方面不会妨碍您。