如何在Rails中为单动作路由添加param



我有一个表示单个操作的嵌套路由,它按预期的方式工作:

resources :abilities, param: :slug do
delete '/company/:slug', controller: :ability_companies, action: :destroy
end

然而,我所有的路由都被定义为符号,参数名称被定义为属性,我希望保持路由定义的一致性。

下面的语法似乎遵循了我在其他地方使用的逻辑,但它不起作用,我也不明白为什么。

delete :company, controller: :ability_companies, action: :destroy, param: :slug

对于上面的行,我得到了一个404错误。我在这里俯瞰什么?

config/routes.rb

resources :abilities, only: [ :destroy ], as: :destroy

在应用程序/控制器/ability_controller.rb 上

def destroy
@ability = Ability.find(params[:my_params])
@ability.destroy
redirect_to any_path
end
private
def my_params
params.require(:abilities).permit(:slug )
end

我最终将嵌套路由视为嵌套资源。考虑到我90%的路线是如何在资源级别上处理的,结果是更语义化(复数"公司"(,也更干净。

由此产生的代码行:

resources :abilities, param: :slug do
resources :companies, controller: :ability_companies, param: :company_slug, only: [:destroy, :create]
end

最新更新