别名路线的名称

mui*_*ine 11 routes ruby-on-rails devise

我需要通过多个名称访问一个路径.在我routes.rb做的

get '/route' => 'controller#edit', :as => 'name_a'
get '/route' => 'controller#edit', :as => 'name_b'
Run Code Online (Sandbox Code Playgroud)

这很好用,但无需加载路由表.根据我对文档的理解,:as在调用时定义一个辅助方法.

所以我去了我的ApplicationController并补充说

alias_method :name_b, :name_a
Run Code Online (Sandbox Code Playgroud)

我删除了第二行 routes.rb

但那失败了 Uncaught exception: undefined method name_a for class ApplicationController

有没有适当的方法为一条路径有两个名字?

=================编辑====================详细说明:

我使用设计的宝石来管理会议,登记,锁定,2种用户等,我们称他们为AdminGuest.宝石很好,但它要求确定的路线名称行为正常.

就我而言,就设计而言,只有注册过程不同,所以我试图构建一个如下所示的结构:

app
  controllers
    users
        admin
            registration_controller.rb
        guest
            registration_controller.rb
        session_controller.rb
        password_controller.rb
        registration_controller.rb
Run Code Online (Sandbox Code Playgroud)

AdminGuest从上述registration_controller其继承的从设计控制器继承.

现在,为了正常工作,Devise需要例如名称guest_user_password以及admin_user_password创建或删除密码检索.在我的情况下,两者都在相同的路径下,所以我希望两个名称重定向到相同的"用户/密码"控制器.

更重要的是,这就是我真正想要的原因.在重定向到密码检索控制器时,我的观点是不应该关心它是否正在处理AdminGuest路由.两者都是用户,所以我想用user_password它们.

因此我的问题.:)

还要注意,正如我所写,事情有效.我只想尝试写出"最优雅的方式".

Hou*_*uen 5

把别名放在你的 ApplicationController 中怎么样?

class ApplicationController < ActionController::Base

alias_method :route_new, :route_old
helper_method :route_new
Run Code Online (Sandbox Code Playgroud)

请记住,它是新名称,然后是旧名称。

helper_method 调用是为了在您的视图中使用这些,而不仅仅是控制器。

如果你愿意,你可以把它放在一个包含的模块中,叫做 RouteAliases