Ruby on rails 如何修复奇怪的rails路由:删除activity.id
我正在使用public_活动gem、rails 6.0.3.2和ruby v2.71 在列出跟踪活动的页面上,我想为记录列表中的每条记录放置一个销毁按钮。我已经用下面显示的代码完成了。但是,我得到了一个路由错误。rails正在寻找的路线是Ruby on rails 如何修复奇怪的rails路由:删除activity.id,ruby-on-rails,routes,Ruby On Rails,Routes,我正在使用public_活动gem、rails 6.0.3.2和ruby v2.71 在列出跟踪活动的页面上,我想为记录列表中的每条记录放置一个销毁按钮。我已经用下面显示的代码完成了。但是,我得到了一个路由错误。rails正在寻找的路线是 activity.id 我希望这条路线是正确的 activity/:id 以下是html(HAML)视图的相关部分: 此路由返回一个错误,说明“没有与[DELETE]匹配的路由”/activity.239(每个记录id明显不同) 如果我将路由更改为: de
activity.id
我希望这条路线是正确的
activity/:id
以下是html(HAML)视图的相关部分:
此路由返回一个错误,说明“没有与[DELETE]匹配的路由”/activity.239(每个记录id明显不同)
如果我将路由更改为:
delete 'activity.:id', to: 'home#destroy_activity'
但我觉得这很奇怪,我宁愿使用“正常”的铁路路线
我做错了什么?Rails鼓励使用restful资源。通常我会在routes.rb文件中这样做
# Add others if appropriate... :create, :show... etc.
resources activities, only: [:destroy]
这将由您的ActivitiesController在activities_controller.rb中处理
那么你的链接将是
= link_to 'Destroy', activity, method: :delete, data: { confirm: 'Are you sure?' }, class: 'btn btn-sm btn-danger'
您的ActivitiesController看起来像这样
class ActivitiesController < ApplicationController
def destroy
@activity = PublicActivity::Activity.find(params[:id])
@activity.destroy
# Redirect or whatever here....
end
类活动控制器
Rails鼓励restful资源。通常我会在routes.rb文件中执行类似操作
# Add others if appropriate... :create, :show... etc.
resources activities, only: [:destroy]
这将由您的ActivitiesController在activities_controller.rb中处理
那么你的链接将是
= link_to 'Destroy', activity, method: :delete, data: { confirm: 'Are you sure?' }, class: 'btn btn-sm btn-danger'
您的ActivitiesController看起来像这样
class ActivitiesController < ApplicationController
def destroy
@activity = PublicActivity::Activity.find(params[:id])
@activity.destroy
# Redirect or whatever here....
end
类活动控制器
尝试执行以下操作:
activity_path(activity.id)
而不是:
activity_path(activity)
您已使用delete'activity/:id',定义了一个自定义路由到:'home#destroy_activity'
,因此这需要对象的id
,而不是对象本身。最好始终在路由定义的末尾添加:as
,以便您可以这样做:
delete 'activity/:id', to: 'home#destroy_activity', as: :activity_destroy
activity_destroy_path(activity.id)
然后你可以这样引用这条路径:
delete 'activity/:id', to: 'home#destroy_activity', as: :activity_destroy
activity_destroy_path(activity.id)
最好的方法是为这些事情始终有一个单独的控制器。因此,当您在主控制器中创建了一个操作销毁活动
时,您可以创建一个单独的活动
控制器,只需添加如下所述的路由:
默认情况下,这将为活动生成CRUD操作,但您可以通过仅使用或来限制它,除非使用尝试执行以下操作:
activity_path(activity.id)
而不是:
activity_path(activity)
您已使用delete'activity/:id',定义了一个自定义路由到:'home#destroy_activity'
,因此这需要对象的id
,而不是对象本身。最好始终在路由定义的末尾添加:as
,以便您可以这样做:
delete 'activity/:id', to: 'home#destroy_activity', as: :activity_destroy
activity_destroy_path(activity.id)
然后你可以这样引用这条路径:
delete 'activity/:id', to: 'home#destroy_activity', as: :activity_destroy
activity_destroy_path(activity.id)
最好的方法是为这些事情始终有一个单独的控制器。因此,当您在主控制器中创建了一个操作销毁活动
时,您可以创建一个单独的活动
控制器,只需添加如下所述的路由:
默认情况下,这将为活动生成CRUD操作,但您可以通过仅使用或来限制它,除非Rails对您的路由有约定问题。请尝试将as::delete
添加到路由定义的末尾。Rails对您的路由有约定问题。请尝试添加as::delete
>到路由定义的结尾。我已经尝试了activity_path(activity.id),但不起作用。但是,按照建议更改路由并使用建议的新路径名(activity_destroy_path(activity.id))确实起作用。非常感谢!我已经尝试了activity_path(activity.id)但是,按照建议更改路由并使用建议的新路径名(activity_destroy_path(activity.id))确实起了作用。非常感谢!我不太确定如何做到这一点。我正在使用public_activity gem和it“包”“它的功能升级为PublicActivity::Activity。我不想干扰任何内置功能。我添加了控制器外观的详细信息。我不能说是100%,因为我没有使用PublicActivity,但是如果这打乱了内置的PublicActivity功能,我会有点惊讶。好的,谢谢。我试试看。那更像是我所习惯的。嗯,我真的不知道该怎么做。我正在使用public_activity gem,它将其功能“打包”为PublicActivity::activity。我不想干扰任何内置功能。我添加了控制器外观的详细信息。我不能说是100%,因为我没有使用PublicActivity,但是如果这打乱了内置的PublicActivity功能,我会有点惊讶。好的,谢谢。我试试看。那将更像我所习惯的。