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. Проверьте, не промаркирован ли маршрут по умолчанию. Если это так, вам нужно будет добавить маршрут для вашего нового действия.