【问题标题】:How to Use Rails 3 Routes with Dynamic Segments如何使用带有动态段的 Rails 3 路由
【发布时间】:2012-03-02 15:15:10
【问题描述】:

在我的 Rails 3.2 应用程序中,有一个运动模型,其属性为muscle_group 和grade_level。我在 config/routes.rb 中为它定义了以下带有 动态段 的路由:

# config/routes.rb
match "/:muscle_group/grade-:grade_level/:id" => "exercises#show"

运行bundle exec rake routes 确认路由确实存在:

/:muscle_group/grade-:grade_level/:id(.:format) exercises#show

数据库包含一个锻炼记录:

  • id = 5
  • muscle_group = "腹部"
  • grade_level = 1

然而,当我将浏览器指向 http://localhost:3000/abdominal/grade-1/5 时,我得到:

Routing Error
No route matches [GET] "/abdominal/grade-1/5"
Try running rake routes for more information on available routes.

如何让这条带有动态路段的路线工作?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 routing routes url-routing


    【解决方案1】:

    Rails 中的操作包使用to_param 来覆盖 URL 帮助程序生成 URL 的方式。看看这篇文章,它解释了它。

    http://www.seoonrails.com/to_param-for-better-looking-urls.html

    【讨论】:

    • 另外,这篇文章似乎是关于一个非常相似的事情。stackoverflow.com/questions/5326483/…
    • 我正在尝试这种方式,覆盖 to_param 以返回 "#{muscle_group}/grade-#{grade_level}/#{id}"。但是在这种情况下,config/routes.rb 会发生什么?
    【解决方案2】:

    我使用的路由声明几乎可以正常工作。出于某种原因,使用连字符并且没​​有将grade_level 作为其自己的/ 分隔子字符串存在问题。当我切换到使用路由声明时:

    match "/:muscle_group/grade/:grade_level/:id" => "exercises#show"
    

    代替原来的:

    match "/:muscle_group/grade-:grade_level/:id" => "exercises#show"
    

    http://localhost:3000/abdominal/grade/1/5 是一个有效的路由。

    我更喜欢这条带有连字符的路线,并希望我知道如何让它发挥作用,但这不是首要任务。如果有人知道如何使用连字符,请告诉我。

    【讨论】:

      猜你喜欢
      • 2011-05-10
      • 1970-01-01
      • 1970-01-01
      • 2011-04-07
      • 2012-06-11
      • 1970-01-01
      • 2011-10-04
      • 1970-01-01
      • 2020-09-08
      相关资源
      最近更新 更多