在 Rails 6 中指定命名空间之外的控制器

Specify controller outside of namespace in Rails 6

我当前的设置有效:

concern :commentable do
  resources :comments, only: %i[create destroy], controller: '/comments'
end

并在路由下使用

namespace :admin do
  resources :discussions, concerns: %i[commentable]
end

在 rails 6 中,当我这样做时,我得到:

ArgumentError ('/comments' is not a supported controller name. This can lead to potential routing problems. See https://guides.rubyonrails.org/routing.html#specifying-a-controller-to-use):

如何指定路由当前模块之外的控制器?

问题出在这里:

concern :commentable do
  resources :comments, only: %i[create destroy], controller: :comments # No '/comments'
end

这将自动投放 POST /commentsDELETE /comments/:id。然后当你将这个问题挂载到你的命名空间时应该可以正常工作

嗯,我没有找到解决这个问题的方法,但我找到了解决方法。

namespace :admin 替换为 scope '/admin/', module: :admin, as: :admin 然后您可以使用 controller: '/comments' 引用当前命名空间之外的控制器。

concern :commentable do
  resources :comments, only: %i[create destroy], controller: '/comments'
end