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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 01:03:16