如何在Rails 6中的Devise路线中嵌入路线资源

问题描述

在通常情况下,如果要在routes.rb文件中将资源嵌入Ruby on Rails的其他资源中,它将看起来像这样:

# routes.rb

resources :parents do
  resources :children
end

以上内容将允许使用类似http:// localhost:3000 / parents / 1 / children的网址。

我的问题是如何使用devise_for :parents文件中存在的routes.rb获得相同的结果?

我尝试过:

# routes.rb

devise_for :parents do
  resources :children
end

它不能正常工作。

非常感谢您的帮助!

解决方法

devise_for仅创建与注册和登录相关的路由,因此您仍将使用

resources :parents do 
  resources :children
 end
在路由中

表示嵌套的资源路径。这里有详细的答案:Nested Resource with Devise - Rails3

如果生成Devise控制器和视图,则还需要像这样在路线中指定那些

  devise_for :parents,controllers: {
    sessions: 'parents/sessions',registrations: 'parents/registrations'
  }