Rails 7 + Active Admin:实现逗号分隔值的筛选功能
解决ActiveAdmin多产品编号逗号分隔筛选问题
针对你的Rails 7.0.4 + ActiveAdmin 2.12.13环境,以下是两种可行的解决方案:
方案一:自定义Ransack Predicate
- 在
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
- 在
admin/products.rb中替换原有筛选器:
filter :product_number_in_list, as: :string, label: 'Product Number (逗号分隔多个值)'
方案二:使用Ransackable Scope
- 在
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
- 在
admin/products.rb中使用该Scope作为筛选器:
filter :product_number_in_list, as: :string, label: 'Product Number (逗号分隔多个值)'
说明
两种方案本质都是将用户输入的逗号分隔字符串拆分为数组,通过SQL的IN查询匹配任意产品编号。方案一更贴近Ransack的原生扩展逻辑,方案二则通过模型Scope实现,更易维护业务逻辑。
内容的提问来源于stack exchange,提问作者ragis
相关产品推荐
相关产品推荐

