Ruby on rails 如何在不复制控制器名称的情况下编写Rails 4路由名称空间?
我希望能够写的是:Ruby on rails 如何在不复制控制器名称的情况下编写Rails 4路由名称空间?,ruby-on-rails,routes,Ruby On Rails,Routes,我希望能够写的是: namespace :cats do get '/:breed/' => '#search_by_breed' get '/:breed/count' => '#count_by_breed' end 但这就导致了这些路线: GET /cats/:breed(.:format) cats/#search_by_breed GET /cats/:breed/count(.:format) cats/#count_by
namespace :cats do
get '/:breed/' => '#search_by_breed'
get '/:breed/count' => '#count_by_breed'
end
但这就导致了这些路线:
GET /cats/:breed(.:format) cats/#search_by_breed
GET /cats/:breed/count(.:format) cats/#count_by_breed
GET /:breed(.:format) cats#search_by_breed
GET /:breed/count(.:format) cats#count_by_breed
考虑到cats/#show
中的斜杠,这将不起作用
我知道我可以通过以下方法做到这一点:
get '/:breed/' => 'cats#search_by_breed'
get '/:breed/count' => 'cats#count_by_breed'
这导致了这些路线:
GET /cats/:breed(.:format) cats/#search_by_breed
GET /cats/:breed/count(.:format) cats/#count_by_breed
GET /:breed(.:format) cats#search_by_breed
GET /:breed/count(.:format) cats#count_by_breed
但是,每次都会重复命名cats
控制器,这是我不愿意做的(在我的实际代码中,我有比上面列出的两条更多的路由。不幸的是,我实际上没有在cat搜索网站上工作…)。我以为这附近会有很多人
我错过什么了吗?只是做了些枯燥的命令?这似乎相当普遍,但我在中没有发现任何类似的情况。要回答您的主要问题,这是一种编写路线以实现您想要的目标的方法:
resources :cats, only: [], path: ":breed" do
collection do
get 'search_by_count', path: 'count'
get 'search_by_breed', path: '/'
end
end
这将生成以下路由:
search_by_count_cats GET /:breed/count(.:format) cats#search_by_count
search_by_breed_cats GET /:breed(.:format) cats#search_by_breed
当然,您仍然可以使用单独的资源声明:cats
来获得索引、显示等的更RESTful版本
回答你的第二个问题,“我是不是做得太过分了?”。在我的经验中,我见过很多情况下,我们以牺牲可读性为代价,将干涸过度,从而导致耦合增加。我个人发现破译以下内容需要更少的脑力开销:
get '/:breed/' => 'cats#search_by_breed'
get '/:breed/count' => 'cats#count_by_breed'
get '/:breed/another' => 'cats#another_route'
要想了解更多关于如何明智地使用DRY的想法,我将提供这篇文章和这篇演讲