为什么我看到“No route matches:action =>”show“”当我为该控制器定义了show动作时?

时间:2012-11-12 16:38:51

标签: ruby-on-rails rails-routing

我有一个“类别”资源,我尝试使用link_to方法和_path路由链接到index.html.erb文件中的Categories#show。当我在浏览器中查看索引时,我看到以下错误:

Routing Error No route matches {:action=>"show", :controller=>"categories"}

但我确实在我的Categories控制器中定义了一个show动作,删除link_to的URI部分会导致索引正常显示而不会抛出异常!我无法弄清楚我的URI出错了。

这是/categories/index.html.erb:

<h1>My Links</h1>

<% @categories.each do |c| %>
    <h2><%= link_to "#{c.category}", category_path %></h2>
    <p><%= c.description %></p>
<% end %>

<%= link_to "Add new category", new_category_path %>

这是/categories/show.html.erb:

<h1><%= @category.category %></h1>

<p><%= @category.description %></p>

<p><%= link_to "Back to index", root_path %></p>

这是/config/routes.rb:

LinkManager::Application.routes.draw do

  resources :categories do
    resources :links
  end

  root :to => 'categories#index'

这是/controllers/categories_controller.rb的一部分:

class CategoriesController < ApplicationController

    def index
        respond_with(@categories = Category.all)
    end


    def show
        @category = Category.find(params[:id])
    end

这是运行rake routes的结果(把它放在pastebin上,因为我无法弄清楚如何在这里很好地格式化它):rake routes

有人能发现什么是错的吗?我在这里查看了许多其他类似的路由问题,但无法从中获得解决方案。谢谢。

2 个答案:

答案 0 :(得分:2)

尝试替换:

<h2><%= link_to "#{c.category}", category_path %></h2>

使用:

<h2><%= link_to "#{c.category}", category_path(c) %></h2>

请参阅?您必须为category_path提供类别。

或者只是使用魔法:

<h2><%= link_to "#{c.category}", c %></h2>

顺便说一下,插值的目的是什么:"#{c.category}"?不仅仅c.category足够吗?

答案 1 :(得分:0)

好吧,我想如果你添加其他路线到行动显示它有效,请执行以下操作:

在您的浏览器中执行此操作:

localhost:3000/categories/show

和您的routes.rb

match "/categories/show/:id" => categories#show

我们的ruby的版本和rails的版本是什么?