you may have ambiguous routes 解决办法

本文探讨了在Rails框架中使用不可数名词如fish作为资源路由时遇到的问题及解决方案。当使用不可数名词时,资源的集合和成员路径会产生冲突,导致路由错误。文章提供了解决方案,通过添加:singular选项来区分集合和成员路径。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值