创建路由时如何指定应该使用哪些控制器?

Posted

技术标签:

【中文标题】创建路由时如何指定应该使用哪些控制器?【英文标题】:How to specify what controllers should be used when creating routes? 【发布时间】:2021-09-20 20:33:00 【问题描述】:

我正在创建一个 Rails 应用程序,我试图不使用 Devise 来处理与我的 User 模型相关的注册和会话,但我遇到了问题。

我想要这样的特定路线:

http://localhost:3000/users/registrations/new http://localhost:3000/users/sessions/new

我尝试了几种解决方案,但都没有奏效,最后尝试的是那些代码行:

get "users/registrations/new", to: "registrations#new", controller: "users/registrations", as: :new_registration
get "users/sessions/new", to: "sessions#new", controller: "users/sessions", as: :new_session

但我收到以下错误:uninitialized constant RegistrationsController

我的registrations_controller 和我的sessions_controller 位于以下路径:app/controllers/users/

有谁知道我该如何处理?我应该使用resources 还是namespace?我已经尝试过这些解决方案,但我一直面临同样的问题......

感谢您的帮助!

【问题讨论】:

这能回答你的问题吗? Override devise registrations controller 不是真的,因为我没有在我的应用程序中使用 Devise。不过谢谢! 【参考方案1】:

在你的情况下,你使用to: "namespace/name_of_controller#action"

get "users/registrations/new", to: "users/registrations#new", as: :new_registration
get "users/sessions/new", to: "users/sessions#new", as: :new_session

另一种方式,更“Rails-y”,是使用namespace

namespace :users do
  resources :registrations, only: [:new] # If you want only the new action
  # ...
end

【讨论】:

以上是关于创建路由时如何指定应该使用哪些控制器?的主要内容,如果未能解决你的问题,请参考以下文章

属性路由默认网址

我应该如何在 Laravel 中构建我的路由和控制器?

Django----路由控制

如何创建不覆盖其他控制器路由的 Codeigniter 路由?

如何laravel视图里访问其他控制器的路由

Laravel入门使用(路由)