【问题标题】:rails routing by id with reserved models通过 id 使用保留模型进行 rails 路由
【发布时间】:2011-01-14 23:11:00
【问题描述】:

我想要使用一个特定模型的 :id 而不是 :model/:id 的短 URL。

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

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

这很好用,当然假设我很小心地保留了一些东西,即新/索引/编辑等。

但是当没有 :id 匹配时,我怎样才能让其他模型继续工作呢? IE /label 甚至 /artist/new

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

谢谢

【问题讨论】:

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


    【解决方案1】:

    这一切都归结为每条路线的优先级。如果您将所有更具体的路由放在 routes.rb 中的短 url 路由之上,它们将首先匹配。如果没有更具体的匹配项,Rails 会将其路由到 Artist#show。

    如果给定 ID 不存在艺术家,您可能需要注意显示相关错误,因为有人可能没有在寻找艺术家,而是在出现错误时期望出现通用 404。

    【讨论】:

    • 我没有意识到它在路由文件中是按优先顺序排列的,谢谢!
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-07
      • 2011-10-23
      相关资源
      最近更新 更多