我需要通过多个名称访问一个路径。在我的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种用户的会话,注册,锁定等,让我们称他们为Admin
和Guest
。宝石非常好,但它要求确定的路线名称表现正常。
就我而言,就设计而言,只有注册过程不同,所以我试图构建一个如下所示的结构:
app
controllers
users
admin
registration_controller.rb
guest
registration_controller.rb
session_controller.rb
password_controller.rb
registration_controller.rb
Admin
和Guest
控制器继承自上述从Devise继承的registration_controller。
现在,为了正常工作,Devise需要例如名称guest_user_password
和admin_user_password
来创建或删除密码检索。在我的情况下,两者都在相同的路径下,所以我希望两个名称都重定向到相同的“用户/密码”控制器。
更重要的是,这就是为什么我真的想要放弃。在重定向到密码检索控制器时,我的观点是否应该关注它是否处理Admin
和Guest
路由。两者都是用户,因此我想将user_password
用于两者。
因此我的问题。 :)
另请注意,正如我所写,事情有效。我只想尝试写出“最优雅的方式”。
答案 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_path
和new_name_url
助手。我用Rails 5.0.6进行了测试。