You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rails7中Contents控制器自定义路由失效,误触发show动作问题

解决Rails Contents控制器自定义路由被show动作覆盖的问题

问题根源是Rails路由匹配遵循从上到下的定义顺序优先规则:你先定义了resources :contents,它生成的GET /contents/:id(对应show动作)会优先匹配所有/contents/xxx格式的请求,导致自定义的destroy/enable/disable被识别为id参数,进而触发show动作引发模板缺失错误。

以下是两种可行的解决办法:

方法一:调整路由定义顺序

将自定义路由放在resources :contents之前,确保Rails先匹配你的自定义动作:

# routes.rb
post '/contents/:id/destroy', to: 'contents#destroy'
get '/contents/:id/enable', to: 'contents#enable'
get '/contents/:id/disable', to: 'contents#disable'

resources :contents

方法二:用resources的member方法添加自定义动作

这是更符合Rails RESTful规范的写法,自动保证路由优先级正确,无需手动调整顺序:

# routes.rb
resources :contents do
  member do
    post :destroy  # 若遵循RESTful规范,destroy建议用DELETE动作,可根据实际需求调整
    get :enable
    get :disable
  end
end

验证路由

修改后运行rails routes命令,确认自定义动作的路由条目出现在contents#show之前,或member生成的路由路径与预期一致(如GET /contents/:id/enable对应contents#enable)。

内容的提问来源于stack exchange,提问作者icalvete

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 19:22:04