我正在开始使用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。今天一切都安装了。 这里可能出了什么问题?
您已经创建了控制器,但尚未为其定义视图。在目录 app/views/people
中添加一个名为 index.html.erb
的文件。
或者,您可以重新运行控制器生成器以生成索引视图:
rails g controller People index
阅读 Rails 指南也是一个好主意。为了了解视图和呈现,请阅读此内容。
只是为了帮助完成此线程,此错误的另一个潜在原因是当您忘记在开发过程中的某个时候您更改了关联控制器方法的签名,就好像它会通过添加(例如)形式参数列表在内部使用一样,例如,您更改了
定义my_controller_method
自
def my_controller_method(my_parameter)
当您应该使用以前的签名并使用以下命令从视图中捕获参数时,例如
参数[:my_parameter]
后一个签名与视图发送的签名不匹配,这将生成此错误。
另一个原因是您忘记了将目标方法设为私有。 将其移动到控制器的公共部分,使其对视图(和其他控制器)可见。
而不是:
resources :people
用
resources :peoples
请记住,rails 编译器总是寻找多个控制器类