Команда curl для УДАЛЕНИЯ из API рельсов в зависимости от того, где предикат? - PullRequest
1 голос
/ 30 июня 2019

Я могу видеть из здесь , как удалить запись таблицы с идентификатором

, то есть при этом удаляется запись пользователя с идентификатором = 1

curl -X DELETE "http://localhost:3000/users/1"

Но что, еслиЯ хотел удалить записи на основе чего-то другого, например, всех пользователей с name: "John", как это можно сделать с помощью команды curl?

Обновление: я думал, что curl -X DELETE -d "name=John" "http://localhost:3000/users" может работать, но это не

1 Ответ

3 голосов
/ 30 июня 2019

В этом случае 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"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...