为什么我得到“PeopleController无法找到”动作'索引'?

时间:2011-05-14 23:04:48

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

我开始使用Ruby on Rails并且正在关注在线教程。本教程让我通过添加以下行修改我的routes.rb文件:

resources :people

我之前也输入了rails generate controller People。 controllers / people_controllers.rb看起来像这样:

class PeopleController < ApplicationController
end

一切对我来说都很好。但是,http://0.0.0.0:3000/people给了我一个错误:

Unknown action
The action 'index' could not be found for PeopleController

我认为我不应该这样做,但是当我添加:

def index
end

到我的控制器,并刷新页面,我得到以下错误:

 Template is missing

Missing template people/index, application/index with {:handlers=>[:erb, :builder], :locale=>[:en, :en], :formats=>[:html]}. Searched in: * "/Users/myuser/projects/project_manager/app/views" 

我正在使用最新版本的Ruby和Rails v3。一切都安装在今天。这可能有什么问题?

3 个答案:

答案 0 :(得分:9)

您已创建控制器但未为其定义视图。在目录index.html.erb中添加名为app/views/people的文件。

或者,您可以重新运行控制器生成器以生成索引视图:

rails g controller People index 

阅读Rails指南也是一个好主意。了解视图和呈现read this

答案 1 :(得分:1)

只是为了帮助完成这个线程,这个错误的另一个潜在原因是当你忘记在开发过程中的某个时刻你改变了相关控制器方法的签名,好像它会在内部通过添加,例如,正式使用参数列表,例如你改变了

  

def my_controller_method

  

def my_controller_method(my_parameter)

当您应该使用以前的签名并使用例如

从视图中捕获参数时
  

PARAMS [:my_parameter]

后一个签名与视图发送的签名不匹配,这将产生此错误。


另一个原因是当您忘记您将目标方法设为私有时。将其移动到控制器的公共部分,使其对视图(以及其他控制器)可见。

答案 2 :(得分:0)

而不是:

resources :people

使用

resources :peoples

请记住,rails编译器总是寻找多个控制器类