У меня есть RESTful Rails 4.2.1 контроллера с маршрутами, как так:Приемки неиспользуемого метода HTTP ресурса
resources :users do
resources :labels, only: %w(index show update destroy)
end
Поскольку модель этого контроллера невероятно крошечная (только имя, идентификатор и которые вы бы не редактировали с помощью этого контроллера), я хотел бы поддержать массовое редактирование PUT
ting или PATCH
, используя маршрут /users/:user_id/labels
. (PUT
и PATCH
не используются в коллекции и захватывают семантику, которую я пытаюсь реализовать, то есть редактирование всей коллекции.)
Проблема в том, что я не вижу, как я могу это сделать. Я могу сказать что-то вроде:
resources :users do
resources :labels, only: %w(index show update destroy) do
collection do
patch 'all', to: 'labels#update_many'
end
end
end
Но это привело бы к маршруту /users/:user_id/labels/all
. Если оставить строку имени пустой или nil, кажется, терпит неудачу (rake routes
не показывает никаких указаний на маршрут), и опускание полностью вызывает ошибку. В то же время, делая что-то вроде этого:
resources :users do
resources :labels, only: %w(index show update destroy)
member do
patch 'labels', to: 'labels#update_many'
end
end
Результаты в маршруте /users/:id/labels
, что почти сразу же за исключением того, что идентификатор пользователя приходит как :id
вместо :user_id
, что делает его трудно обрабатывать выборки объекта пользователя.
Я полагаю, что я мог бы жестко кодировать весь маршрут в корневом уровне match
, но это просто неправильно.
Есть ли какой-то трюк, о котором я не знаю, для этого?
не уверен, что это работает: patch '/', to: 'labels # update_many' – srecnig