在Rails Administrate中如何将搜索从模糊匹配改为精确匹配?
解决Administrate中数字字段搜索精确匹配的问题
Administrate默认对Field::Number类型的搜索采用模糊匹配(LIKE),要改成精确匹配(=),可以通过以下两种方式实现:
方法一:自定义精确匹配的数字字段类
这种方式更通用,适合多个仪表盘复用:
- 在项目中创建
app/admin/fields/exact_number_field.rb文件(若fields目录不存在则新建),写入以下代码:
class ExactNumberField < Administrate::Field::Number def search_query(query) table[attribute_name].eq(query) end end
- 在你的仪表盘类中,将原有的
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
相关产品推荐
相关产品推荐

