我有一个表示单个操作的嵌套路由,它按预期的方式工作:
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