我正在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
答案 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文件中。
另一方面,如果您将操作写入现有控制器(包括使用控制器的生成器但未指定操作),或者自己创建控制器文件,则必须手动更新路径文件。如果 使用生成器并指定操作并且没有获得更新的路由,我不确定发生了什么。
就个人而言,我更喜欢手工编写我的路线 - 发电机通常不会完全正确。