Переопределение параметров маршрутов с помощью NIL в Rails? - PullRequest
0 голосов
/ 20 мая 2019

Есть ли способ использовать маршрутизацию ресурсов вместо записи маршрутов по одному, если мои методы, для которых по умолчанию ожидаются параметры, не используют параметры?

Например, если бы у меня был файл маршрутов, как показано ниже, ожидаемый путь для метода update был бы таким: /cats/:id ( docs )

# routes.rb
Rails.application.routes.draw do
  resources :cats, only: [:create, :update]
end

Однако мне не требуются какие-либо параметры для моего update метода, то есть путь должен быть /cats. Я знаю, что есть способ переименовать параметры и не использовать :id, но я ничего не нашел по их отключению. Я попытался добавить param: nil в конец строки, но это не сработало.

Как я писал изначально, я знаю, что это можно сделать, если я напишу маршруты по одному, как показано ниже. У меня вопрос, могу ли я использовать resources, чтобы сделать это. Спасибо!

# routes.rb
Rails.application.routes.draw do
  post 'cats', to: 'cats#create'
  put 'cats', to: 'cats#update'
end

Ответы [ 2 ]

3 голосов
/ 20 мая 2019

Это именно тот случай использования для единичных ресурсов.Цитата из Rails Guides :

Иногда у вас есть ресурс, который клиенты всегда ищут без ссылки на ID.Например, вы бы хотели, чтобы /profile всегда показывал профиль текущего пользователя, вошедшего в систему.

Измените нашу маршрутизацию на

resource :cats, only: [:create, :update]

И будут созданы следующие маршруты:

cats PATCH /cats(.:format)     cats#update
     PUT   /cats(.:format)     cats#update
     POST  /cats(.:format)     cats#create
0 голосов
/ 20 мая 2019

Насколько я знаю, нет, resource - это просто помощник для создания стандартных маршрутов CRUD на основе глаголов. Если вы хотите использовать собственные маршруты, вам нужно определить свой маршрут обновления так, как вы это делали во втором примере.Конечно, вы все равно можете использовать resource для вашего create маршрута и просто пройти only: :create.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...