ruby-on-rails – Activeadmin:如何过滤匹配两个或多个搜索词的字符串

假设我有一个带有:email字段的User类.我们假设我使用activeadmin来管理用户.

制作一个过滤器,返回与一个字符串匹配的电子邮件,例如“史密斯”,很简单.在admin / user.rb中,我只包含该行

filter :email 

这给了我一个完成工作的过滤器小部件.

但是,此过滤器不允许我搜索多个项的交集.我可以搜索包含“smith”的电子邮件,但不能搜索包含“smith”和“.edu”的电子邮件.

谷歌告诉我,activerecord在引擎盖下使用Ransack,而Ransack demo则采用“高级”模式,允许多个术语搜索.

将多项搜索小部件放入activeadmin的最简单方法是什么?

理想情况下,我想要一个小部件,允许我输入smith .edu或smith AND .edu来过滤包含这两个术语的电子邮件.

最佳答案
使用可运行的范围有简单的解决方案

所以在你的模型中加入这样的东西

class User < ActiveRecord::Base
    ....
    scope :email_includes, ->(search) {
       current_scope = self
       search.split.uniq.each do |word|
         current_scope = current_scope.where('user.email ILIKE ?', "%#{word}%")  
       end
       current_scope
    }

    def self.ransackable_scopes(auth_object = nil)
      [ :email_includes]
    end
end

在此之后,您可以添加AA DSL过滤器

喜欢

  filter :email_includes, as: :string, label: "Email"

UPD

如果将email_contains_any更改为email_includes应该有效

转载注明原文:ruby-on-rails – Activeadmin:如何过滤匹配两个或多个搜索词的字符串 - 代码日志