В этом случае API немного изменится.Маршрут для DELETE
API по умолчанию на Rails требует, чтобы идентификатор был передан в качестве входных данных в обязательном порядке.Формат запроса some_api/:id
.Однако для вашего случая использования вам понадобится другой API, который не обязательно должен вводить идентификатор в качестве входных данных.Это может быть многоцелевой API, который удаляет по имени, идентификатору и т. Д. Например:
# app/controllers/users_controller.rb
def custom_destroy
@users = User.filtered(filter_params)
@users.destroy_all
<render your response>
end
def filter_params
params.permit(:id, :name, <Any other parameters required>)
end
# app/models/user.rb
scope :filtered, -> (options={}) {
query = all
query = query.where(name: options[:name]) if options[:name].present?
query = query.where(id: options[:id]) if options[:id].present?
query
}
Маршрут этого может быть описан как:
resources :users do
collection do
delete :custom_destroy
end
end
Это приведет к маршруту: localhost:3000/users/custom_destroy
, который можно вызвать с помощью действия DELETE
.т.е.
curl -X DELETE "http://localhost:3000/users/custom_destroy?name=John"