Маршрутизация Rails: ресурсы только с пользовательскими действиями

У меня есть NotificationsController, в котором есть только действие clear.

Я хочу получить доступ к этому действию, выполнив POST /notifications/clear

Итак, я написал это в своем маршрутизаторе:

  resources :notifications, :only => [] do
    collection do
      post :clear
    end
  end

Есть ли более чистый способ добиться этого? я думал

  scope :notifications do
    post :clear
  end

сделал бы это, но у меня ошибка missing controller, потому что - я думаю - он ищет контроллер clear.


person Augustin Riedinger    schedule 19.07.2013    source источник


Ответы (2)


Если вы используете область действия, вы должны добавить контроллер, который выглядит так

scope :notifications, :controller => 'notifications' do
  post 'clear'
end

Или просто используйте пространство имен

namespace :notifications do
  post 'clear'
end
person rails_id    schedule 19.07.2013
comment
А если мне нужна и коллекция do и член do в ней? Мне все еще нужно определить post '/:id/edit вручную? - person Augustin Riedinger; 19.07.2013
comment
В вашем случае используйте область или пространство имен, да (get :edit, :path => '/:id/edit') . Если вам не нужно вручную, вы можете использовать свою запись на свой вопрос. Читайте здесь stackoverflow.com/q/17465335/1297435 - person rails_id; 19.07.2013
comment
Да, я чувствую, что :only => [] является наиболее явным и менее хакерским решением. Спасибо - person Augustin Riedinger; 19.07.2013
comment
Я согласен с @AugustinRiedinger, используя только: [] выглядит намного чище для меня, тогда вы можете использовать член и коллекцию, как обычно - person Amir El-Bashary; 31.03.2020

person    schedule
comment
Пожалуйста, объясните, почему ваш ответ правильный, и что это значит. - person DonBoitnott; 19.07.2013
comment
Я хочу сгруппировать все действия уведомления и иметь в нем method :action, как это делают ресурсы, но без действий по умолчанию, которые я не использую. - person Augustin Riedinger; 19.07.2013