【问题标题】:Understanding how nested routes work in Rails了解嵌套路由在 Rails 中的工作原理
【发布时间】:2022-01-27 10:45:51
【问题描述】:

我有点困惑。 这是我的路线文件:

当我尝试这个时,链接将不像预期的那样(cl 是我的清单):

<%= page_checklist_path(cl) %>

链接的呈现字符串为:

/pages/31/checklists/4

但应该是的

/pages/4/checklists/31

这里有什么问题?

【问题讨论】:

  • 有什么理由不使用shallow nesting
  • 直到现在这对我来说都是新的,因此我还不知道这是否会给我带来优势以及它是否会解决我的问题。我首先必须阅读浅嵌套的主题

标签: ruby-on-rails ruby routes nested-routes


【解决方案1】:

当使用这样的嵌套路由时,您必须提供两个实例作为参数。请参阅 Rails 指南中的creating paths and URLs from objects。这意味着你需要像这样调用你的路由助手:

<%= page_checklist_path(page, checklist) %> # or
<%= page_checklist_path(checklist.page, checklist) %>

如果你想避免这种情况,我建议使用shallow nesting。无论如何,清单的 ID 在您的数据库中都是唯一的,因此在嵌套路由时实际上不需要页面 ID。

有趣的事实:您示例中 URL 中的 4 不是页面的 ID(因为您根本没有提供页面)。但是 Ruby 中的 nil has the ID 4

【讨论】:

  • 谢谢,现在工作正常。典型的初学者错误。我以前也遇到过这种情况,但我没有考虑这种情况。我看看你上次写的内容
  • @spickermann 我在这里不明白的是为什么问题中的代码没有引发ActionController::UrlGenerationError 以及它到底是如何从@987654331 将nil 强制转换为4 @ 很久以前就被贬低并删除了。我还在 MRI 3.0.2 上收到 nil.object_id == 8
猜你喜欢
  • 1970-01-01
  • 2017-07-17
  • 2020-05-15
  • 1970-01-01
  • 1970-01-01
  • 2015-11-22
  • 1970-01-01
  • 2020-11-19
  • 1970-01-01
相关资源
最近更新 更多