Ruby on rails 如何修复奇怪的rails路由:删除activity.id

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

我正在使用public_活动gem、rails 6.0.3.2和ruby v2.71

在列出跟踪活动的页面上,我想为记录列表中的每条记录放置一个销毁按钮。我已经用下面显示的代码完成了。但是,我得到了一个路由错误。rails正在寻找的路线是

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功能,我会有点惊讶。好的,谢谢。我试试看。那将更像我所习惯的。