Почему я получаю «Индекс действия не может быть найден для PeopleController»? - PullRequest
2 голосов
/ 15 мая 2011

Я начинаю работать с Ruby on Rails и слежу за онлайн-руководством.В этом руководстве я изменил свой файл rout.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 ]

9 голосов
/ 15 мая 2011

Вы создали контроллер, но не определили его вид. Добавьте файл с именем index.html.erb в каталог app/views/people.

В качестве альтернативы вы можете перезапустить генератор контроллера для генерации представления индекса:

rails g controller People index 

Также хорошей идеей является чтение Руководств по Rails. Для вашего понимания взглядов и рендеринга прочитайте это .

1 голос
/ 24 мая 2012

Просто, чтобы помочь завершить этот поток, еще одна потенциальная причина этой ошибки - когда вы забываете, что в какой-то момент в процессе разработки вы изменили сигнатуру соответствующего метода контроллера, как если бы он был использован внутри, добавив, например, формальный список параметров, например ты изменил

def my_controller_method

до

def my_controller_method (my_parameter)

когда вместо этого вы должны были использовать прежнюю подпись и перехватывать параметры из представления, например,

Титулы [: my_parameter]

Последняя подпись не будет совпадать с той, которую отправляет представление, что приведет к этой ошибке.


Еще одна причина - вы забыли, что сделали целевой метод закрытым. Переместите его в публичный раздел вашего контроллера, чтобы сделать его видимым для представления (и для других контроллеров).

0 голосов
/ 17 марта 2017

вместо:

resources :people

использование

resources :peoples

Помните, что компилятор rails всегда ищет множество контроллеров класса

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...