我想使用一个特定模型的id来代替以下的短网址:model /:id。
我知道如何使用匹配来实现:id工作
match ":id" => "artist#show", :as => :artist
这很好,假设当然我会保留一些保留的东西,即新/索引/编辑等。
但是,当no:id匹配时,我怎么能让其他模型工作呢? IE /标签甚至是/ artist / new
我也希望通过嵌套来进一步做到这一点,所以我也有...:artist_id /:album 是否有一些简单的方法来处理具有自定义路径的嵌套路由?
由于
答案 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+/ }