Ссылка или кнопка Rails 3, выполняющая действие в контроллере - PullRequest
8 голосов
/ 26 сентября 2011

В RoR 3 я просто хочу иметь ссылку / кнопку, которая активирует некоторое действие / метод в контроллере. В частности, если я нажимаю ссылку «update_specs» на странице, она должна перейти к методу «update_specs» в контроллере моих продуктов. Я нашел предложения сделать это на этом сайте:

link_to "Update Specs", :controller => :products, :action => :update_specs

Однако при переходе по этой ссылке я получаю следующую ошибку маршрутизации:

Ошибка маршрутизации. Не найдено ни одного маршрута {: action => "update_specs", : Контроллер => "продукты"}

Я прочитал о маршрутизации, но я не понимаю, почему я должен маршрутизировать этот метод, если все другие методы доступны через ресурсы: продукты.

1 Ответ

14 голосов
/ 26 сентября 2011

Вам нужно создать для него маршрут.

Например:

resources :products do
  put :update_specs, :on => :collection
end

Также по умолчанию link_to будет искать метод GET в ваших маршрутах. Если вы хотите обработать метод POST или PUT, вам нужно указать его, добавив {:method => :post } или {:method => :put } в качестве параметра, например:

link_to "Update Specs", {:controller => :products, :action => :update_specs}, {:method => :put }

Или вы можете использовать button_to вместо link_to, который по умолчанию обрабатывает метод POST.

...