Rails7 Active Admin中Friendly ID路由报错的解决方法咨询
解决Active Admin与Friendly ID的路由兼容问题
问题核心在于Active Admin默认以id字段查找资源,而你的前端通过Friendly ID将URL替换为slug格式,导致后台路由无法匹配到正确记录。以下是具体解决方法:
1. 重写Active Admin控制器的资源查找逻辑
在admin/workshop.rb中,自定义控制器的find_resource方法,替换默认查找方式为Friendly ID的查询逻辑:
ActiveAdmin.register Workshop do # 保留你原有的配置(如permit_params、页面布局设置等) controller do def find_resource # 用Friendly ID的friendly.find替代默认find方法 scoped_collection.friendly.find(params[:id]) end end end
scoped_collection是Active Admin提供的方法,会自动应用当前资源的权限与作用域限制,结合friendly.find即可通过slug正确定位Workshop记录。
2. 确认模型的Friendly ID配置正确
确保Workshop模型已正确启用Friendly ID,示例配置如下:
class Workshop < ApplicationRecord extend FriendlyId # 根据title生成slug,可替换为其他业务字段 friendly_id :title, use: :slugged end
3. 验证后台链接生成
Active Admin会自动调用模型的to_param方法生成URL参数,而Friendly ID已重写该方法返回slug,因此后台的查看、编辑、删除链接会自动使用slug格式,无需额外修改。若有自定义链接代码,确保直接使用workshop(而非workshop.id)生成路径。
内容的提问来源于stack exchange,提问作者Muhammad Bilal
相关产品推荐
相关产品推荐

