【发布时间】:2013-03-27 02:01:48
【问题描述】:
我需要一个路径可以通过多个名称访问。在我的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 失败
是否有任何正确的方法可以为单个路径设置两个名称?
=================编辑==================== 阐述:
我使用 Devise gem 来管理 2 种用户的会话、注册、锁定等,我们称他们为 Admin 和 Guest。 gem 放置得很好,但它要求明确的路线名称才能正常运行。
就我而言,就设计而言,只有注册过程不同,所以我正在尝试构建一个如下所示的结构:
app
controllers
users
admin
registration_controller.rb
guest
registration_controller.rb
session_controller.rb
password_controller.rb
registration_controller.rb
Admin 和Guest 控制器继承自上面的registration_controller,后者继承自Devise。
现在,为了正常工作,Devise 需要例如名称 guest_user_password 和 admin_user_password 来创建或删除密码检索。就我而言,两者都在同一路径下,因此我希望两个名称都重定向到相同的“用户/密码”控制器。
更重要的是,这就是我真正想要的原因。是我的观点不应该关心重定向到密码检索控制器时它是否正在处理Admin 和Guest 路由。两者都是用户,所以我想对两者都使用user_password。
因此我的问题。 :)
还请注意,正如我所写,一切正常。我只是想用“最优雅的方式”来写它。
【问题讨论】:
-
:as => 'name_a' 为路由创建了一个别名,例如 name_a_path 和 name_b_path,它是一种路由机制,不会发生在控制器中。
-
所以这意味着不,除了加载路由表别无他法。 :( 谢谢。
-
为什么你需要用不同的名字引用相同的路径?
-
因为宝石要求我不尊重的名字:)
-
“因为宝石要求我不尊重的名字”+1 我同意这一点。
标签: ruby-on-rails devise routes