别名路线的名称

时间:2013-04-04 20:02:17

标签: ruby-on-rails devise routes

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

get '/route' => 'controller#edit', :as => 'name_a'
get '/route' => 'controller#edit', :as => 'name_b'

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

所以我去了ApplicationController并添加了

alias_method :name_b, :name_a

我从routes.rb

删除了第二行

但是Uncaught exception: undefined method name_a for class ApplicationController

失败了

是否有正确的方法为单个路径设置两个名称?

================= EDIT ==================== 阐述:

我使用Devise gem管理2种用户的会话,注册,锁定等,让我们称他们为AdminGuest。宝石非常好,但它要求确定的路线名称表现正常。

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

app
  controllers
    users
        admin
            registration_controller.rb
        guest
            registration_controller.rb
        session_controller.rb
        password_controller.rb
        registration_controller.rb

AdminGuest控制器继承自上述从Devise继承的registration_controller。

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

更重要的是,这就是为什么我真的想要放弃。在重定向到密码检索控制器时,我的观点是否应该关注它是否处理AdminGuest路由。两者都是用户,因此我想将user_password用于两者。

因此我的问题。 :)

另请注意,正如我所写,事情有效。我只想尝试写出“最优雅的方式”。

2 个答案:

答案 0 :(得分:3)

如何将别名放在ApplicationController中?

class ApplicationController < ActionController::Base

alias_method :route_new, :route_old
helper_method :route_new

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

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

如果您愿意,可以将其放在名为RouteAliases

之类的包含模块中

答案 1 :(得分:0)

您可以在routes.rb

中添加类似的内容
Rails.application.routes.draw do

  ...

  Rails.application.routes.named_routes.tap do |named_routes|
    named_routes['new_name'] = named_routes['real_name']
  end
end

这将创建new_name_pathnew_name_url助手。我用Rails 5.0.6进行了测试。