我的routes.rb中有match ":id" => "people#show"
现在我可以访问http://localhost:3000/1
但是,在视图<%= link_to'显示'中,人们%>它会生成http://localhost:3000/people/1
,
我希望它是http://localhost:3000/1
答案 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)
。