ruby-on-rails - 使用 link_to 创建分层模型的链接

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

好的,我是 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/

相关文章:

mysql - 如何访问mysql表字段模式描述列?

javascript - 如何使用 AngularJS、Devise 和 UI Router 全局实现身份验证?

ruby - 正则表达式 (\d{3})(?=\d) 是什么意思?

ruby-on-rails - 回形针力 下载

database-design - 单表继承是解决我的 Rails 问题的正确解决方案吗?

ruby-on-rails - 如何在 VIM + Rails.vim + Ubuntu 中运行当前的 RSpec 测试?

ruby-on-rails - load 与 Ruby 中的 require 有何不同?

ruby - 安装 Ruby 后 MAC OS X 上的事件开发者路径无效

ruby-on-rails - rails 4 : passing multiple arguments to partial

ruby-on-rails-3 - Rspec,测试更新 Controller 不起作用?