使用保留模型的id路由路由

时间:2011-01-14 23:11:00

标签: ruby-on-rails model-view-controller ruby-on-rails-3 routing routes

我想使用一个特定模型的id来代替以下的短网址:model /:id。

我知道如何使用匹配来实现:id工作

match ":id" => "artist#show", :as => :artist

这很好,假设当然我会保留一些保留的东西,即新/索引/编辑等。

但是,当no:id匹配时,我怎么能让其他模型工作呢? IE /标签甚至是/ artist / new

我也希望通过嵌套来进一步做到这一点,所以我也有...:artist_id /:album 是否有一些简单的方法来处理具有自定义路径的嵌套路由?

由于

2 个答案:

答案 0 :(得分:1)

这一切都取决于每条路线的优先顺序。如果您将所有更具体的路线放在routes.rb中的短网址路线上方,它们将首先匹配。如果没有更具体的匹配,Rails会将其路由到艺术家#show。

如果没有艺术家存在给定ID,您可能需要注意显示相关错误,因为某人可能没有找过艺术家,而是在发生错误的情况下期望通用404。

答案 1 :(得分:0)

仅匹配/\d+/会有帮助吗?您可以使用此类约束来保护路由匹配。请参阅:http://guides.rubyonrails.org/routing.html#segment-constraints

match ":id" => "artist#show", :as => :artist, :constraints => { :id => /\d+/ }