Rails没有匹配的路线[DELETE]

时间:2019-07-15 17:36:09

标签: ruby-on-rails reactjs

因此,我试图通过在ReactJS中进行提取请求来删除数据库中的某些内容,Rails API Mode将对此进行处理。

这就是我在前端中获取它的方式:

removeParticipationToContribution = id_request => {
        fetch(
            `http://localhost:3000/participants?id_request=${id_request}&user_id=${localStorage.getItem(
                'email'
            )}`,
            {
                method: 'DELETE',
                headers: {
                    'Content-Type': 'application/json',
                    'X-User-Email': localStorage.getItem('email'),
                    'X-User-Token': localStorage.getItem('token')
                }
            }
        )
    }

这是这条路线的线: resources :participants, only: [:create, :show, :destroy]

这里的问题是,当我触发此函数时,出现此错误: ActionController::RoutingError (No route matches [DELETE] "/participants"):

这是我的controller

def destroy
        participant = Participant.where(id_request: participant_params[:id_request], user_id: participant_params[:user_id]).first
        puts "---------------"
        puts params.inspect
        puts participant_params[:user_id]
    end

    private def participant_params
        params.permit(:id_request, :user_id)
    end

但是似乎他不了解controller

我试图做http://localhost:3000/participants/destroy?id_request=... 但这给了我unpermitted params一堆,而这两个参数是允许的。

1 个答案:

答案 0 :(得分:3)

DELETE路由(通过运行rake routes | grep participants可以看到)期望使用以下格式的路由:

DELETE /participants/:id(.:format) participants#destroy

但是,您正在尝试访问路线:

http://localhost:3000/participants?id_request=(...)&user_id=(...)

这是一条不同的路线。 id必须是路由参数,而不是查询参数。

如果这不是您想要的路线格式,则可以手动定义它(即,不要仅遵循代表您生成的rails的标准约定)。

例如,您可以选择使用:

delete 'participants/:id_request/:user_id(.:format)', :to => 'participants#destroy'

或者:

delete 'participants(.:format)', :to => 'participants#destroy'

(...,如果缺少必需的参数,则在控制器中失败)

但是无论您选择这样做,路由结构都需要与您的调用方式相匹配。