如何在rails 3路由中省略两个型号的控制器?

时间:2012-04-05 13:44:49

标签: ruby-on-rails ruby-on-rails-3 routes

我正在构建一个rails3应用程序,目前我的routes.rb文件中有以下行:

get "/:id" => 'tapes#show'

换句话说,您可以使用website.com/tapes/1using website.com/1显示磁带 (我也在使用friendly_id gem,因此用户实际上看到website.com/tapename)形式的友好URL

现在,我想要实现的是为用户页面做同样的事情。因此,我希望能够使用website.com/users/alex而不是显示使用website.com/alex的用户页面。

有没有办法实现这个'用户' routes.rb 中的逻辑与现有的“磁带”规则一起以某种方式设置优先级? 因此,如果有人访问website.com/alex,我的应用会搜索是否存在带有ID' alex'的用户记录。如果没有找到,那么找一个带有id' alex'的磁带

我可以在路线中使用某种高级约束吗? 有什么想法吗?

非常感谢你的帮助,

亚历

1 个答案:

答案 0 :(得分:1)

Rails无法确定您尝试访问的控制器。唯一可行的方法是:

  1. 您可以根据名称上的某个正则表达式确定要解析的模型。 或

  2. 您知道用户名和磁带名称从不冲突,并且愿意承担命中数据库以解决正确控制器的成本。

  3. 由于多种原因,这可能是一个坏主意,它会产生性能影响,也不符合RESTful原则,并且可能会让用户感到困惑。