Rails 3.0: добавление нового действия в контроллер
Перед рельсами 3.0 добавление нового действия в контроллер было легким.
Вы просто добавляете новый метод foobar
в класс контроллера (называемый mycontroller).
Добавьте html файл в папку представлений для этого контроллера, foobar.html.erb
Затем, если вы укажете браузер на .../mycontroller/foobar
, все будет работать.
Однако в rails 3.0, когда я добавил новое действие, как описано выше, я получаю следующую ошибку:
Нет совпадений маршрутов "/mycontroller/foobar"
Что изменилось в rails 3.0? Что я делаю неправильно?
Ответы
Ответ 1
Добавьте это в routes.rb
:
get 'mycontroller/foobar'
Это направит URL http://mysite.com/foobar
в действие foobar
с помощью HTTP GET.
Дополнительная информация:
-
Обратите внимание, что определение a def foobar
в контроллере не является строгим требованием (если вам не нужно что-то делать в foobar
до отображения представления), но представление должно существовать. Другими словами, даже если метод def foobar
не существует в контроллере, вид foobar.html.erb
будет отображаться.
-
Вот хороший обзор маршрутов в Rails 3.
-
Кроме того, если вы еще не знаете, вы можете перечислить все маршруты, которые вы знаете о приложении rake routes
. Следовательно, если вывод rake routes
не перечисляет маршрут к некоторому контроллеру/действию, тогда произойдет ошибка "Нет соответствия маршруту".
Ответ 2
Ошибка говорит все. У вас нет соответствующего маршрута в вашем config/routes.rb. Проверьте, не промаркирован ли маршрут по умолчанию. Если это так, вам нужно будет добавить маршрут для вашего нового действия.
Ответ 3
Этот вопрос был пересмотрен на прошлой неделе. Вы найдете то, что вам нужно здесь
Приложение Rails не видит мои представления