因此,我试图通过在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
一堆,而这两个参数是允许的。
答案 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'
(...,如果缺少必需的参数,则在控制器中失败)
但是无论您选择这样做,路由结构都需要与您的调用方式相匹配。