了解嵌套路由在 Rails 中的工作原理

Understanding how nested routes work in Rails

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

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

<%= page_checklist_path(cl) %>

link 的渲染字符串为:

/pages/31/checklists/4

但应该是

/pages/4/checklists/31

这里有什么问题?

当使用这样的嵌套路由时,您必须提供两个实例作为参数。请参阅 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(因为您根本没有提供页面)。但是 nil has the ID 4 在 Ruby.