【问题标题】:Specify controller outside of namespace in Rails 6在 Rails 6 命名空间之外指定控制器
【发布时间】:2019-10-30 10:06:27
【问题描述】:

我的当前设置有效:

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

它在路由下使用

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

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

ArgumentError('/cmets' 不是受支持的控制器名称。这可能导致潜在的路由问题。请参阅https://guides.rubyonrails.org/routing.html#specifying-a-controller-to-use):

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

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-6


    【解决方案1】:

    好吧,我没有找到解决方法,但我找到了解决方法。

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

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

    【讨论】:

      【解决方案2】:

      问题出在这里:

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

      这将自动提供POST /commentsDELETE /comments/:id。然后,当您在命名空间上安装此问题时应该可以正常工作

      【讨论】:

      • 包含在命名空间声明下时不起作用。它正在寻找控制器admin/comments,所以这是当前的问题。
      猜你喜欢
      • 2014-05-19
      • 2023-03-11
      • 2012-07-08
      • 1970-01-01
      • 1970-01-01
      • 2012-05-19
      • 2012-03-07
      • 2017-01-18
      • 1970-01-01
      相关资源
      最近更新 更多