A couple of times I’ve noticed people saying that uncountable names (like sheep and fish) can’t be used with resource routes in Rails. Well, they can.
# in config/routes.rb
map.resources :fish
In the above example there is a conflict between the generated url helpers for the ‘fish’ collection and the generated url helpers for members of the ‘fish’ collection. Because ‘fish’ is uncountable, both are called fish_path or fish_url. And because of the way routes and url helpers are created in a map.resources call, the member url helpers override the collection ones.
So using the above example, calling fish_path() raises an error like:
ActionController::RoutingError: fish_url failed to generate from {:controller=>"fish", :action=>"show"} - you may have ambiguous routes, or you may need to supply additional parameters for this route. content_url has the following required parameters: ["fish", :id] - are they all satisifed?
Thankfully that’s not the end of it. You just have to add a :singular argument when defining your resources:
# in config/routes.rb
map.resources :fish, :singular => :fish_instance
# in your code
fish_path() #=> /fish
new_fish_instance_path() #=> /fish/new
fish_instance_path(1) #=> /fish/1
edit_fish_instance_path(1) #=> /fish/1;edit
That’s all.
Rails中不可数名词资源路由
本文探讨了在Rails框架中使用不可数名词如fish作为资源路由时遇到的问题及解决方案。当使用不可数名词时,资源的集合和成员路径会产生冲突,导致路由错误。文章提供了解决方案,通过添加:singular选项来区分集合和成员路径。
4313

被折叠的 条评论
为什么被折叠?



