使用link_to为层次模型创建链接

时间:2012-11-28 01:46:05

标签: ruby-on-rails ruby ruby-on-rails-3 link-to

好的,所以我是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}"是正确的,因为我尝试将其与静态网址(谷歌或其他东西)一起使用,但project_list_tasks_url(@list.id,task.id)是我遇到麻烦的地方。

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

2 个答案:

答案 0 :(得分: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方法。它们更短,输出更容易阅读和调试。如果您没有正确区分www.mysite.comsite.com,他们也不会无意中翻转浏览器中的网址并导致会话问题。

路由规则#3

当它被提供给路由路径方法时,不要忘记@project@project.id之间存在巨大的差异。

如果路由器可用,它将始终调用to_param方法,并且可以在模型中覆盖此方法以生成漂亮或友好的URL。 id仅适用于您的数据库和数据库。 to_param用于路由,但除非您执行异常不正常的操作,否则您不应手动调用它。

答案 1 :(得分:1)

您通常不应该嵌套资源more than one level deep,但将其放在一边,link_to格式应为:

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

即。 project_link_tasks_url应为project_link_task_url,您必须将@project作为第一个参数传递(我假设您的项目名为@project)。我已将_url切换为_path,因此您可以将对象本身作为参数而不是其ID传递。

有关详细信息,请参阅documentation on creating paths and URLs from objects