使用Rails 5.1.4 & Ruby 2.4.1:为何DELETE请求无destroy_visitor_path?
Rails中DELETE请求对应的路由辅助方法说明
嘿,我来帮你捋清楚这个疑惑~
首先要明确:你找的destroy_visitor_path其实并不存在,这是Rails RESTful路由的正常设计!
为什么没有destroy_visitor_path?
在Rails的RESTful路由规则里,删除单个资源的操作,复用了单个资源的路由辅助方法visitor_path,通过HTTP请求方法来区分不同的动作:
- 当使用
GET方法调用visitor_path(@visitor)时,对应visitors#show动作(获取资源详情) - 当使用
DELETE方法调用visitor_path(@visitor)时,对应visitors#destroy动作(删除资源)
看你提供的路由列表:
DELETE /visitors/:id(.:format) visitors#destroy
这条路由对应的辅助方法就是visitor_path,只是需要指定请求方法为DELETE。
正确的使用方式
在视图中调用删除链接时,应该这样写:
<%= link_to '删除访客', visitor_path(@visitor), method: :delete, data: { confirm: '确定要删除该访客吗?' } %>
在控制器或其他地方发起请求时,也需要指定DELETE方法,比如用redirect_to或者HTTP客户端调用时。
可选:手动创建destroy_visitor_path(不推荐)
如果你确实想要一个命名为destroy_visitor_path的路由,可以手动添加,但这不符合Rails的RESTful约定,不建议这么做:
# 在routes.rb中添加 delete '/visitors/:id', to: 'visitors#destroy', as: :destroy_visitor
内容的提问来源于stack exchange,提问作者user8773096
相关产品推荐
相关产品推荐

