crodev
crodev

Reputation: 1491

Rails DELETE route not working properly / not calling the controller function

I am using React and Rails API. To make a request from React I am using Axios library and the code looks like this:

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)
        })
    }

In order to handle this request I have set up a route for it which looks like this:

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

As you can see from the code snippet above, the route is set to call delete_issue function inside of the issues controller. I have created that function and it looks like this:

class V1::IssuesController < ApplicationController

    # other functions

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

I am justing trying to find the issue with an id that is passed as params from Axios delete request.

It is supposed to delete it and return nothing with a status code of 200. What happens instead is that in my "Network" tab inside of developer tools in my browser(Firefox) shows the 200 OK request with the OPTIONS method. There is no DELETE method being sent or anything.

I even tried to comment out the delete_issue function from IssuesController and there was not 404 routing error. The result was the same. I can't find out what is wrong with it even though it is probably a pretty obvious error which I can't see.

Note that I am using Rails 6.

Upvotes: 1

Views: 347

Answers (1)

Ibraheem Ahmed
Ibraheem Ahmed

Reputation: 13538

It seems you did not configure rack-cors. Simply add this to your cors.rb file:

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

Upvotes: 1

Related Questions