操作控制器错误。 Url Generation错误。没有路线匹配

时间:2015-03-11 03:41:24

标签: ruby-on-rails ruby-on-rails-3 actioncontroller

我正在lynda.com处理“Ruby on rails 3必备培训”,并且在生成服务器时出现问题。到目前为止,我有subjects_controller.rb链接到我的观看文件夹,文件list.html.erb。尝试启动服务器时出现错误:

No route matches {:action=>"show", :controller="subjects", :id=>1}

在我的list.html.erb文件中,我编写了代码:

<td class="actions">
  <%= link_to("Show", {:action => 'show', :id => subject.id}, :class => 'action show') %>
  <%= link_to("Edit", '#', :class => 'action edit') %>
  <%= link_to("Delete", '#', :class => 'action delete') %>
</td>

我的subjects_controller.rb看起来像是:

class SubjectsController < ApplicationController
  def list 
    @subjects = Subject.order("subjects.position ASC")
  end
end

我已经仔细检查以确保我的所有内容与教师的内容相同,但似乎缺少链接。有任何想法吗?如果我完全删除了这个动作:

<%= link_to("Show", {:action => 'show', :id => subject.id}, :class => 'action show') %>

然后服务器启动。这里一定有问题,但我不确定它是什么。此外,当教师在他的文本编辑器上输入link_to时,txt会变成另一种颜色而我的则不会。与他的“@”实例变量相同。我不会改变颜色。不确定这是否意味着什么。感谢您的任何意见!

这是我的config/routes.rb文件:

Rails.application.routes.draw do
  root :to => "demo#index"
  get 'demo/index'
  get 'demo/hello'
  get 'demo/other_hello'
  get 'subjects/list'
end

1 个答案:

答案 0 :(得分:1)

简短版本:错误消息告诉您到底出了什么问题。您没有匹配的路由,因为当您的操作名为list时,您的链接指定:action => 'show'

更长的版本:link_to助手的第二个参数应该告诉Rails为链接生成什么URL,通常是通过按名称指定一个路由,但有时(如本例所示),指定动作(以及可选的控制器)。您正在指定操作show。隐含subjects控制器。因此,Rails正在尝试查找获取routes.rb操作的路由(在SubjectsController#show中定义的路由)。但是,正如您在routes.rb中看到的那样,您只在SubjectsController上定义了一条路线,而list就是这样。

如果您对您拥有的路线或名称是什么感到困惑,可以使用rake routes任务以可读的格式列出所有路线。

编辑以回复后续问题:

  

教师告诉我,当你生成一个控制器和   它应该添加路由到routes.rb文件夹的操作。这个   我早些时候为我工作但是在创造我正在做的这些行动时   麻烦,现在,它没有在routes.rb文件夹中生成任何内容。   你知道为什么吗?

当你的教练说'生成'时,他们可能意味着'使用rails generate命令'。当您使用生成器创建控制器并指定其中的操作时,它还会将这些操作添加到routes文件中。 另一方面,如果您将操作写入现有控制器(包括使用控制器的生成器但未指定操作),或者自己创建控制器文件,则必须手动更新路径文件。如果 使用生成器并指定操作并且没有获得更新的路由,我不确定发生了什么。

就个人而言,我更喜欢手工编写我的路线 - 发电机通常不会完全正确。