【问题标题】:How do I link_to an html.erb page?如何链接到 html.erb 页面?
【发布时间】:2013-12-23 17:14:17
【问题描述】:

我是 Rails 的新手,在将新的 html.erb 页面链接到 我的导航标签。

我使用带有 projects_controller.rb 的 Scaffolding 创建了一个应用程序。我当然有显示我的项目路径的 index.html.erb,它还包含我所有项目的表。 我有我的新、编辑、销毁、更新和展示。显示包含projects_path的指定项目。好的,现在我尝试做的是使用 projects_controller.rb 创建 (2) 新页面。所以我去添加了def delinquent和def close。两者都模仿 def 索引,因为我希望这 2 个页面上的功能完全相同。我还创建了 (2) 个新的 html.erb 页面,名称为 delinquent.html.erb 和 closed.html.erb。我希望这些页面的行为就像索引页面一样,但只显示拖欠和关闭的项目,而不是像我在 index.html.erb 上显示的所有可用项目。我的导航栏、navbar-inner、nav、nav pull-right 都已到位。我有 (3) 个链接准备好了,只是不知道如何将我新创建的页面链接到最后 2 个链接:

  <li><%= link_to "Active Projects", projects_path></li>
  <li><%= link_to "Delinquent Projects", '#' %></li> # I want to link this to delinquent.html.erb
  <li><%= link_to "Closed Projects", '#' %></li> # I want to link this to closed.html.erb

【问题讨论】:

  • 另外,仅供参考,您在上面的第一个 link_to 上缺少结束 erb 标签 %&gt;
  • 那么路由一定是我的问题。我尝试添加 delinquent_path 代替“#”,但得到未定义的局部变量或方法“delinquent_path”。
  • 在我的 routes.rb 中,尽管我所拥有的只是在我的初始构建期间生成的资源:项目。因此,我只是想如果在 projects.controller.rb 中的 def delinquent 会占用。
  • 是的,我在这个线程中输入代码。虽然在我的开发环境中是正确的。不过还是谢谢。

标签: html css ruby-on-rails ruby


【解决方案1】:

在你的控制器中

def index
  @project = Project.all
end

def delinquent
  @projects = Project.delinquent_projects
  render :template => :index
end

def closed
  @projects = Project.closed_projects
  render :template => :index
end

您也可以将index.html的内容提取到一个partial(除了标题),并在相应的views中渲染该partial

在 config/routes.rb 中(在文件顶部)

match 'projects/delinquent' => "projects#delinquent", :as => :delinquent_projects
match 'projects/closed' => "projects#closed", :as => :closed_projects

在视图中

<li><%= link_to "Active Projects", projects_path %></li>
<li><%= link_to "Delinquent Projects", delinquent_projects_path %></li>
<li><%= link_to "Closed Projects", closed_projects_path %></li>

【讨论】:

  • 所以我尝试在 routes.rb 中输入两行代码并运行 rake routes....我收到“Rake aborted! undefined local variable or method 'delinquent_projects'”我也得到了这个 '>' 和 'block in >' 消息
  • 修改了我的答案。命名路由应该是一个符号或字符串
  • 好的,我觉得我差不多明白了。当我将鼠标悬停在“活动项目”链接上时,它会显示 /Projects。将鼠标悬停在“拖欠项目”上会显示项目/拖欠。但是,当我单击链接时,我收到“找不到 id=delinquent 的项目”错误。这是有道理的,因为它不是一个项目。我想生成所有项目,如活动链接显示,我只想让视图显示不同的东西。 (基于我设置 delinquent.html.erb 页面的方式)
  • 您应该在您的 routes.rb 顶部添加两行。最好紧跟在Calamus::Application.routes.draw do 之后
  • 啊好吧,我终于弄明白了。感谢您的提示,他们带领我走上了正确的道路。
【解决方案2】:

rake routes 将显示您当前的路线及其路径。只需在末尾添加_path_url

【讨论】:

    【解决方案3】:

    您走在正确的道路上,您还需要做更多的事情。如果您已经将以下控制器操作添加到 projects_controller.rb,

    def delinquent
    end
    
    def closed
    end
    

    并且您已经创建了视图,您需要做的就是定义路线。这是在 config 目录中的 routes.rb 文件夹中完成的。将这两行添加到文件中,您应该可以开始了。

    get 'delinquent_projects' => 'projects#delinquent', as: 'delinquent_projects'
    get 'closed_projects' => 'projects#closed', as: 'closed_projects'
    

    现在,在您看来,您将可以访问以下 rails 助手

    delinquent_projects_path
    closed_projects_path
    

    不过,在您尝试使用它们之前,请在终端中运行“rake routes”以查看它们是否已正确创建。

    祝你好运,欢迎来到 Rails!

    【讨论】:

    • 感谢您的回复。但是,当我尝试在 routes.rb 文件中输入两行代码时出现语法错误。我还看了下面的答案,我假设这些行应该以“匹配”开头?
    • 我的错误,我忘了在这些路线的前面添加“get”这个词,现在它应该适合你了。正如您所建议的, match 也可以解决问题。
    猜你喜欢
    • 1970-01-01
    • 2019-06-10
    • 1970-01-01
    • 1970-01-01
    • 2015-04-21
    • 1970-01-01
    • 1970-01-01
    • 2015-06-21
    • 1970-01-01
    相关资源
    最近更新 更多