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

Rails 7 + Active Admin:实现逗号分隔值的筛选功能

解决ActiveAdmin多产品编号逗号分隔筛选问题

针对你的Rails 7.0.4 + ActiveAdmin 2.12.13环境,以下是两种可行的解决方案:

方案一:自定义Ransack Predicate

  1. 在app/models/product.rb中添加Ransack自定义规则:
Ransack.configure do |config|
  config.add_predicate 'in_list',
    arel_predicate: 'in',
    formatter: proc { |value| value.split(',').map(&:strip).reject(&:empty?) },
    validator: proc { |value| value.present? },
    type: :string
end
  1. 在admin/products.rb中替换原有筛选器:
filter :product_number_in_list, as: :string, label: 'Product Number (逗号分隔多个值)'

方案二:使用Ransackable Scope

  1. 在app/models/product.rb中添加查询Scope并配置可被Ransack调用:
# 处理逗号分隔的产品编号列表
scope :product_number_in_list, ->(numbers) {
  number_list = numbers.split(',').map(&:strip).reject(&:empty?)
  number_list.present? ? where(product_number: number_list) : all
}

# 声明该Scope可被Ransack使用
def self.ransackable_scopes(auth_object = nil)
  [:product_number_in_list]
end
  1. 在admin/products.rb中使用该Scope作为筛选器:
filter :product_number_in_list, as: :string, label: 'Product Number (逗号分隔多个值)'

说明

两种方案本质都是将用户输入的逗号分隔字符串拆分为数组,通过SQL的IN查询匹配任意产品编号。方案一更贴近Ransack的原生扩展逻辑,方案二则通过模型Scope实现,更易维护业务逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 09:25:04