Ruby on Rails | 在ActiveAdmin中将字符串转为链接的实现方案
规范解决方案:将逗号分隔的许可证号转为ActiveAdmin链接
方案一:优化模型方法(推荐,分离数据与视图逻辑)
先修改模型中的方法,规避SQL注入风险,并返回许可证ID数组而非字符串,让视图层更易处理:
def permit_ids_needing_maps # 使用参数化查询防止SQL注入 result = ActiveRecord::Base.connection.exec_query( "select dbo.NeedMapsList($1)", "NeedMapsList Query", [[nil, self.CONO]] ) return [] if result.rows.empty? # 拆分逗号分隔的字符串为ID数组,过滤空值 result.rows.flatten.first.split(/,\s+/).reject(&:blank?) end
方案二:在ActiveAdmin侧边栏生成链接
在ActiveAdmin详情页的侧边栏中,遍历ID数组生成对应的ActiveAdmin链接:
sidebar :permits_needing_maps, only: :show do permit_ids = resource.permit_ids_needing_maps if permit_ids.empty? span "暂无需要地图的许可证" else ul do permit_ids.each do |id| li link_to(id, admin_well_master_path(id)) end end end end
方案说明
- 安全性提升:用参数化查询替代直接字符串拼接,避免SQL注入漏洞
- 关注点分离:模型仅负责数据提取与格式化,视图层处理展示逻辑,符合Rails最佳实践
- 用户体验优化:处理空数据场景,避免空白侧边栏
- 可维护性:返回数组格式后,后续若需调整展示样式(如改为逗号分隔的链接),只需修改视图代码即可
内容的提问来源于stack exchange,提问作者Sean Gillespie
相关产品推荐
相关产品推荐

