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

在Rails Administrate中如何将搜索从模糊匹配改为精确匹配?

解决Administrate中数字字段搜索精确匹配的问题

Administrate默认对Field::Number类型的搜索采用模糊匹配(LIKE),要改成精确匹配(=),可以通过以下两种方式实现:

方法一:自定义精确匹配的数字字段类

这种方式更通用,适合多个仪表盘复用:

  1. 在项目中创建app/admin/fields/exact_number_field.rb文件(若fields目录不存在则新建),写入以下代码:
class ExactNumberField < Administrate::Field::Number
  def search_query(query)
    table[attribute_name].eq(query)
  end
end
  1. 在你的仪表盘类中,将原有的Field::Number替换为自定义的ExactNumberField:
ATTRIBUTE_TYPES = {
    user_id: ExactNumberField.with_options(searchable: true),
    id: Field::Number,
    company_id: ExactNumberField.with_options(searchable: true),
    notes: Field::Text,
    created_at: Field::DateTime,
    updated_at: Field::DateTime
}.freeze

方法二:在当前仪表盘类中重写搜索逻辑

如果只需要在当前仪表盘生效,可以直接重写search方法:

def search(query)
  return super unless query.present?

  # 对user_id和company_id执行精确匹配查询
  exact_matches = relation.where(user_id: query).or(relation.where(company_id: query))
  # 合并其他字段的默认搜索结果
  exact_matches.or(super)
end

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 08:49:51