Rails DELETE route не работает должным образом / не вызывает функцию контроллера - PullRequest
1 голос
/ 01 мая 2020

Я использую React и Rails API. Чтобы сделать запрос из React, я использую библиотеку Ax ios, и код выглядит так:

const _deleteIssue = () => {
        axios.delete(`${ROOT_API}/v1/issue/delete/${props.issue.id}`, {
            headers: {
                'Authorization': `Bearer ${authToken}`
            }
        }).then(res => {
            props.updateProjectData()
        }).catch(err => {
            console.log(err)
        })
    }

Чтобы обработать этот запрос, я настроил для него маршрут, который выглядит следующим образом:

Rails.application.routes.draw do
  concern :base_api do
    # other routes
    post 'issues/create', to: 'issues#create'
    delete 'issue/delete/:issue_id', to: 'issues#delete_issue'
  end

  namespace :v1 do
    concerns :base_api
  end
end

Как видно из фрагмента кода выше, маршрут настроен на вызов функции delete_issue внутри контроллера issues. Я создал эту функцию, и она выглядит следующим образом:

class V1::IssuesController < ApplicationController

    # other functions

    def delete_issue     
        Issue.find_by(id: params[:issue_id]).delete
        render json: {}, status: 200
    end
end

Я просто пытаюсь find решить проблему с идентификатором, который передается как параметр из запроса Ax ios на удаление.

Предполагается удалить его и ничего не возвращать с кодом состояния 200. Вместо этого происходит то, что на моей вкладке "Сеть" внутри инструментов разработчика в моем браузере (Firefox) отображается 200 OK запрос по методу OPTIONS. Метод DELETE не отправляется или что-либо еще.

Я даже пытался закомментировать функцию delete_issue из IssuesController, и не было ошибки 404 маршрутизации. Результат был таким же. Я не могу понять, что с ним не так, хотя это, вероятно, довольно очевидная ошибка, которую я не вижу.

Обратите внимание, что я использую Rails 6.

1 Ответ

1 голос
/ 01 мая 2020

Кажется, вы не настраивали стеллаж-корс. Просто добавьте это в ваш cors.rb файл:

Rails.application.config.middleware.insert_before 0, Rack::Cors do
  allow do
    origins 'localhost:3001' # or you react app domain

    resource '*',
      headers: :any,
      methods: [:get, :post, :put, :patch, :delete, :options, :head]
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...