【问题标题】:Getting no route matches on the show action在 show 操作中没有路线匹配
【发布时间】:2012-01-11 11:03:06
【问题描述】:

我正在尝试使用以下路线中的路径,这是rake routes中的样子

章节 GET /chapters/:id(.:format) {:action=>"show", :controller=>"chapters"}

chapter_path 创建了一个指向/chapters/x 的链接,这是正确的,但在尝试访问它时出现路由错误。

没有路线匹配 {:controller=>"chapters"}`

这是我的路线(我正在使用浅层路由来创建 books_chaptersbook_chapters_new 路径。

resources :books do
  resources :chapters, :shallow => true
end

当我用 rake 路由测试路由时,我得到了 books_chapters、books_chapters_new、chapter 和 books,所以我不知道出了什么问题。

当我删除:shallow => true 时,我可以访问/books/1/chapters/6,但我只希望它是/chapters/6

这就是我的终端的样子

所以/chapters/id/chapters/id/edit 应该可以正常工作。

我已经用touch tmp/restart.txt 重新启动了服务器并运行rails s 以查看路由是否也在那里工作,rake routes 给了我可接受的路由,但它们对我不起作用。

【问题讨论】:

    标签: ruby-on-rails routes


    【解决方案1】:

    您是否为路径助手提供参数,例如

    chapter_path(@chapter)
    

    【讨论】:

    • 是的,像这样<%= link_to chapter.title, chapter_path(chapter) %> 章节是书籍索引中 for 循环的迭代器。创建的链接是 /chapters/id ,这是我想要的,但该页面是问题所在,尽管 rake routes 告诉我 chapter_path() 在那里。
    • 可能是个愚蠢的问题,但是您是否重新启动服务器以便可以拾取路由?
    • 你能进入你的 Rails 控制台试试app.chapter_path(Chapter.first)
    【解决方案2】:

    我不知道如何让 :shallow 路线工作,并且在 rails 指南中没有关于如何使用 :shallow 的示例,所以我必须像这样使用嵌套路线

    resources :books do
      resources :chapters
    end
    

    现在这意味着像 chapters_urlchapters_path 这样的东西将不起作用。

    所以我必须到处做这样的事情

    book_chapter_url(@chapter.book, @chapter)
    

    edit_book_chapter_path(@chapter.book, @chapter)
    

    它可以工作,但有一点代码味道,因为我使用了两次@chapter,整个 url 应该能够仅通过章节 id 解析。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-07
      • 1970-01-01
      • 1970-01-01
      • 2018-09-22
      相关资源
      最近更新 更多