好的,我是 Rails 新手,正在使用该框架创建一个项目管理系统。对于我的几个模型、 View 和 Controller ,我使用了脚手架,没有出现任何问题。对于其他部分,我自己编码了所有部分。
因此,作为我的项目的概述,从根本上讲,您可以拥有许多项目。在所有这些项目中,您可以创建多个待办事项列表。在每个待办事项列表中,您可以有多个任务。这就是我标题中所说的“层级”的意思。
我刚刚创建了列表页面,当我直接在浏览器中转到 URL 时(例如:http://localhost:3000/projects/3/lists/20/tasks/1
) 任务显示正确。但是,我不知道如何格式化待办事项 ListView 之一中的链接(任务通常显示在待办事项列表下方,但现在我希望它们显示在自己的 View 上)。
这是我当前拥有的代码:
<%= link_to "#{task.description}", project_list_tasks_url(@list.id,task.id) %>
我知道 link_to "#{task.description}"
是正确的,因为我尝试将它与静态 URL(Google 或其他)一起使用,但是 project_list_tasks_url(@list.id ,task.id)
是我遇到麻烦的地方。
有人可以帮我吗?我可以从我的待办事项列表或任务 Controller 和 View 中提供您想要的尽可能多的代码。
最佳答案
一些有助于减少路由困惑的提示。习惯起来可能会有点不安。
路由规则#1
始终检查 rake routes
的输出确定如何调用您的各种路由方法。您可能认为通过查看 routes.rb
就知道您的路线将如何发挥。但在查看编译的路由表之前您不会知道。
在您的情况下,您期望的路线格式如下:
/projects/:project_id/lists/:list_id/tasks/:id
请确保情况确实如此。如果是,您的调用应如下所示:
project_list_task_path(@project, @list, task)
请注意,此处的参数是 :project_id
, :list_id
和:id
,因此在本例中这三个都是必需的。路径规范中括号中的任何内容都可以忽略,例如 :format
通常是。
路由规则#2
使用_path
方法,除非您严格要求完整的 URL。它们更短,输出更容易阅读和调试。如果您没有正确区分www.mysite.com
,它们也不会无意中翻转浏览器中的URL并导致 session 问题。和site.com
.
路由规则#3
不要忘记 @project
之间存在巨大差异和@project.id
当它提供给路由路径方法时。
路由器将始终调用 to_param
方法(如果可用)并且可以在模型中覆盖该方法以生成漂亮或友好的 URL。 id
适用于您的数据库并且仅适用于您的数据库。 to_param
用于路由,但您不应该手动调用它,除非您正在做一些非常不规则的事情。
关于ruby-on-rails - 使用 link_to 创建分层模型的链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13596448/