Rails隐藏控制器名称

时间:2011-01-11 15:18:29

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

我的routes.rb中有match ":id" => "people#show" 现在我可以访问http://localhost:3000/1

但是,在视图<%= link_to'显示'中,人们%>它会生成http://localhost:3000/people/1

我希望它是http://localhost:3000/1

3 个答案:

答案 0 :(得分:3)

您可以执行以下操作以确保仅匹配数字ID:

match '/:id' => 'people#show', :constraints => {:id => /\d+/}

一个好的选择可能是使用某种标识符,即使它不是控制器名称:http://localhost:3000/p/1。这至少可以确保如果您添加其他控制器和操作,您最终不必更改路由结构。

答案 1 :(得分:1)

您可以编写自定义路由以匹配config / routes.rb中的路由。在routes.rb文件的底部,您将拥有匹配':controller(/:action(/:id(.:format)))'之类的路线 或类似resources :people之类的东西。您可能必须编写与所需路径类型匹配的路径。

答案 2 :(得分:1)

您必须创建命名路线。

match ':id' => 'people#show', :as => :person

并修复您的观点以使用您的新方法person_path(user_id)