我有2个通配符路由,如下所示:
get '*country_path/', to: 'country#list', constraints: { country_path: /\/$/ }
get '*country_path/:title', to: 'country#show'
Run Code Online (Sandbox Code Playgroud)
当url有一个尾部斜杠时,应调用country#list.例子:
www.example.com/usa/california/
www.example.com/usa/california/abc/
Run Code Online (Sandbox Code Playgroud)
country#show应该在没有尾部斜杠时调用.例子:
www.example.com/usa/californa/travel
www.example.com/usa/californa/average-income
Run Code Online (Sandbox Code Playgroud)
目前我的约束似乎不起作用,因为所有请求都转到country #list.
我的路线约束有什么问题?
您应该问问自己这是否真的是实现您想要做的事情的最佳方式.网站通常不关心目录中的尾部斜杠.例如:
www.facebook.com/username
Run Code Online (Sandbox Code Playgroud)
会带你去同一个地方:
www.facebook.com/username/
Run Code Online (Sandbox Code Playgroud)
绝大多数网站都是这样工作的,所以你现在要做的就是反对网络惯例.如果你关心它,肯定会对SEO产生影响.即使你不这样做,也应该考虑在测试这些路线时你将面临的困难.你的测试会很脆弱,从长远来看会引起很多挫折.
我的建议是这样的:如果你想区分list和show,把它们放到URL中.例如:
www.example.com/usa/california/list
www.example.com/usa/california/abc/list
Run Code Online (Sandbox Code Playgroud)
可以将用户带到country#list"california"和"abc"作为参数.同理:
www.example.com/usa/californa/travel/show
www.example.com/usa/californa/average-income/show
Run Code Online (Sandbox Code Playgroud)
可以带用户country#show.这要容易得多.它也更标准和用户友好.有关更多信息,请参阅外部的Rails路由.
| 归档时间: |
|
| 查看次数: |
574 次 |
| 最近记录: |