我正在尝试在我的rails应用中访问以下网址:
example.com/user12 # It should show user#show
exmple.com/wordpress # It should show category#show
我的解决方案:(它不起作用)
在routes.rb
我已将:path => ''
添加到categories and users
,以便从网址中删除控制器的名称。
resources :categories, :path => ''
resources :users, :path => ''
当我运行rake routes
时,我有以下网址“
category GET /:id(.:format) category#show
account GET /:id(.:format) accounts#show
所以我认为它应该正常工作,但肯定不行。它仅适用于类别名称和用于显示ActiveRecord::RecordNotFound
的用户名。
我知道,我的解决方案是错误的,因为我混淆了rails路由系统,并且因为resources :categories
的优先级高于resources :users
,所以类别显示页面工作正常。
那么有没有解决方案来解决这样的问题?
答案 0 :(得分:1)
我终于找到了constraints
选项的解决方案。此选项接受正则表达式。
resources :categories, :path => '', constraints: { id: /wordpress|php/ }
每个类别都应该以这种方式手动添加或(我不确定)是否有办法自动列出数据库中的所有类别。
答案 1 :(得分:0)
这样做的一种方法是覆盖默认的rails路由,为此删除resources
我测试了,这有效
SampleRails4::Application.routes.draw do
get '/user12', to: 'users#show' #=> users/show
get '/wordpress', to: 'category#show' #=> assuming u have a controller and action
end
然而,您必须更新其余代码,例如:users/show
可能希望用户ID为关于rails路由的param
read more