Ruby on rails 为层次模型使用链接创建链接

Ruby on rails 为层次模型使用链接创建链接,ruby-on-rails,ruby,ruby-on-rails-3,link-to,Ruby On Rails,Ruby,Ruby On Rails 3,Link To,好的,我是Rails的新手,正在用这个框架创建一个项目管理系统。对于我的几个模型、视图和控制器,我使用了脚手架,没有任何问题。对于其他部分,我自己对所有部分进行编码 因此,作为我项目的概述,从根本上说,你可以有很多项目。在所有这些项目中,您可以创建多个待办事项列表。在每个待办事项列表中,您可以有多个任务。这就是我在标题中所说的“分层”的意思 我刚刚创建了我的列表页面,当我直接在浏览器中转到URL时(例如:http://localhost:3000/projects/3/lists/20/task

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

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

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

以下是我目前拥有的代码:

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

我知道“#{task.description}”的
链接是正确的,因为我尝试将它与静态URL(Google或其他东西)一起使用,但是
项目列表任务URL(@list.id,task.id)
是我遇到问题的地方


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

通常不应嵌套资源,但抛开这一点,链接到
格式的
链接应为:

link_to task.description, project_list_task_path(@project, @list, task)
i、 e.
project\u link\u tasks\u url
应该是
project\u link\u task\u url
,并且必须将
@project
作为第一个参数传递(我假设您的项目名为
@project
)。我已将
\u url
切换到
\u path
,这样您就可以将对象本身作为参数而不是ID传递


有关详细信息,请参阅。

一些有助于减少路由混乱的提示。习惯会让人有点不安

路由规则#1

始终检查
rake routes
的输出,以确定如何调用各种路由方法。通过查看
routes.rb
,您可能会认为您知道您的路由将如何运行,但只有查看编译后的路由表,您才能知道

在您的情况下,您希望使用以下格式的路由:

/projects/:project_id/lists/:list_id/tasks/:id
一定要这样。如果是,您的呼叫应该如下所示:

project_list_task_path(@project, @list, task)
请注意,这里的参数是
:project\u id
:list\u id
:id
,因此在本例中这三个参数都是必需的。可以忽略路径规范中括号内的任何内容,如
:格式通常为

路由规则#2

除非您严格要求完整的URL,否则请使用
\u path
方法。它们更短,输出更易于阅读和调试。如果您没有正确区分
www.mysite.com
site.com
,它们也不会无意中在浏览器中翻转URL并导致会话问题

路由规则#3

不要忘记,当它被提供给路由路径方法时,
@project
@project.id
之间有着巨大的区别


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

请注意,由于
{x}
x
几乎总是相同的,因此最好在此处使用
task.description
作为第一个参数。你所做的等同于“吓唬人的引语”,毫无用处。+1你的实际代码与我的代码相同,但你提供了一个很好的解释。哇,非常感谢你在这方面提供的帮助和很好的解释。事实上,我可以回去用你的提示重新编写我的很多代码。非常感谢!:)