如何解决如何修复奇怪的铁轨路线:DELETE activity.id
我正在使用public_activity gem,rails 6.0.3.2和ruby v2.71。
在列出跟踪活动的页面上,我想为记录列表中的每个记录放置一个“销毁”按钮。我已经完成了下面显示的代码。但是,出现路由错误。路线栏杆正在寻找
activity.id
我希望路线成为
activity/:id
以下是html(HAML)视图的相关部分:
-@activities.each do |activity|
...<other code>...
.float-right
= link_to 'Destroy',activity_path(activity),method: :delete,data: { confirm: 'Are you sure?' },class: 'btn btn-sm btn-danger'
这是我的config / routes.rb文件中的相关路由:
delete 'activity/:id',to: 'home#destroy_activity'
此路由返回一个错误,指出“没有路由与[DELETE]匹配//activity.239”(每个记录ID明显不同)。
如果我将路线更改为:“销毁”按钮也可以正常工作
delete 'activity.:id',to: 'home#destroy_activity'
但这对我来说很奇怪,我宁愿使用“正常”的铁轨路线。
我做错了什么?
解决方法
铁路鼓励宁静的资源。通常,我会在我的route.rb文件中做类似的事情。
names values label
A 3 0
B 5 1
C 2 0
D 4 1
E 7 0
F 2 0
G 9 0
H 3 0
I 7 1
J 3 0
K 7 1
ActivityController将在activity_controller.rb中处理哪些问题。
那么您的链接就是
# Add others if appropriate... :create,:show... etc.
resources activities,only: [:destroy]
您的ActivitiesController看起来像这样
= link_to 'Destroy',activity,method: :delete,data: { confirm: 'Are you sure?' },class: 'btn btn-sm btn-danger'
,
尝试这样做:
activity_path(activity.id)
代替:
activity_path(activity)
您已使用delete 'activity/:id',to: 'home#destroy_activity'
定义了一条自定义路由,因此这需要对象的id
而不是对象本身。最好总是在路由定义的末尾添加:as
,这样您就可以这样做:
delete 'activity/:id',to: 'home#destroy_activity',as: :activity_destroy
然后您可以像这样引用此路径:
activity_destroy_path(activity.id)
最好的方法是始终为这些事情使用单独的控制器。因此,当您在家庭控制器中创建动作destroy_activity
时,您可以创建一个单独的activities_controller
并仅在Kaom Te下面的answer中添加这样的路由:
resources activities
默认情况下,这将为活动生成CRUD操作,但是您可以使用only
或except
来限制它。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。