使用ransacker进行自定义搜索

我正在尝试向ActiveAdmin添加自定义filter,这些filter最近由Ransack提供支持。 遗憾的是, ransacker根本没有记录,而且从网上的少量资源中我偶然发现了以下内容(在用户模型中):

 ransacker :full_text, formatter: ->(search) { ids = User.search_in_all_translated(search).map(&:id) ids = ids.any? ? ids : nil } do |parent| parent.table[:id] end 

search_in_all_translated方法返回一个用户数组,该数组与所有已翻译属性中的搜索字符串匹配。

在管理页面上,定义了以下filter:

 filter :full_text_in, label: 'full text search', as: :string 

filter本身有效,因此过滤tom会列出所有匹配的记录。 但是,滤波器输入中的值切换为["tom"]

在应用filter之前:

在此处输入图像描述

应用filter后:

在此处输入图像描述

任何想法如何解决这一问题?

可转换范围等待合并的function: https : //github.com/activerecord-hackery/ransack/pull/288

更新:

我已经给了avit和glebm的工作另外去了PR https://github.com/activerecord-hackery/ransack/pull/390已经合并,因此现在可以使用Ransack的范围。 有关文档,请参阅提交:

https://github.com/svoop/ransack/commit/72dd5d12d58919bf37199234cf13f9533f3b8cd5

这是一个真实的例子:

 class Project < ActiveRecord::Base scope :full_text_search, ->(search) { search_in_all_translated(search) } def self.ransackable_scopes(auth_object = nil) [:full_text_search] end end 

在此示例中, search_in_all_translated返回一些复杂的索引全文搜索SQL。

incont_any通过数组进行搜索。 所以在这种情况下,它正在搜索Model.where(something: ["tom", "tom1", "tom2"]并且由于params [:q]的工作方式,它将它作为数组返回到您的输入我为帮助用户体验所做的快速而肮脏的修复是增值value: nil,输入表单