2

好的,所以我是 Rails 的新手,正在使用该框架创建一个项目管理系统。对于我的几个模型、视图和控制器,我使用了脚手架并且没有任何问题。对于其他部分,我自己编写了所有部分。

因此,作为我项目的概述,从根本上讲,您可以拥有许多项目。在所有这些项目中,您可以创建多个待办事项列表。在每个待办事项列表中,您可以有多个任务。这就是我在标题中所说的“分层”的意思。

我刚刚创建了我的列表页面,当我直接在浏览器中访问 URL(例如:)时http://localhost:3000/projects/3/lists/20/tasks/1,任务会正确显示。但是,我不知道如何格式化我的待办事项列表视图之一中的链接(任务通常显示在待办事项列表下方,但现在我希望它们显示在自己的视图中)。

这是我目前拥有的代码:

<%= link_to "#{task.description}", project_list_tasks_url(@list.id,task.id) %>

我知道这link_to "#{task.description}"是正确的,因为我尝试将它与静态 URL(谷歌或其他东西)一起使用,但这project_list_tasks_url(@list.id,task.id)是我遇到问题的地方。

有人可以帮帮我吗?我可以从我的待办事项列表或任务控制器和视图中提供尽可能多的代码。

4

2 回答 2

2

一些技巧可以帮助减少路由的混乱。习惯了可能有点令人不安。

路由规则 #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 并导致会话问题site.com

路由规则#3

不要忘记将它提供给路由路径方法之间和何时提供巨大差异。@project@project.id

The router will always call the to_param method if it's available and this can be over-ridden in your model to produce pretty or friendly URLs. id is for your database and your database alone. to_param is for routing but you shouldn't be calling it manually unless you're doing something exceptionally irregular.

于 2012-11-28T01:57:38.313 回答
1

您通常不应将资源嵌套超过一层 deep,但抛开这一点,link_to格式应该是:

link_to task.description, project_list_task_path(@project, @list, task)

ieproject_link_tasks_url应该是project_link_task_url,并且您必须将 the@project作为第一个参数传递(我假设您的项目名为@project)。我已经切换_url到,_path所以您可以将对象本身作为参数而不是它们的 id 传递。

有关详细信息,请参阅有关从对象创建路径和 URL 的文档

于 2012-11-28T01:54:25.197 回答