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

标签 ruby-on-rails activerecord activeadmin ransack

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

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

filter :email 

这给了我一个可以完成这项工作的过滤器小部件。

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

Google 告诉我 activerecord 使用 Ransack引擎盖下,以及 Ransack demo具有允许多个术语搜索的“高级”模式。

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

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

最佳答案

有使用ranasckable范围的简单解决方案

所以把这样的东西放在你的模型中

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_anyemail_includes

关于ruby-on-rails - Activeadmin:如何过滤匹配两个或多个搜索词的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33309759/

相关文章:

html - 通过 json 并在 View 中显示数据的正确语法是什么 - Rails 5?

ruby-on-rails - 在 Rails 应用程序上设计、CanCan 和 ActiveAdmin

ruby-on-rails - 为应用程序和 CMS 使用单用户模型时如何限制对 activeadmin 仪表板的访问?

ruby-on-rails - Sprockets::FileNotFound(用于 gem ActiveAdmin)

ruby-on-rails - Base64 编码的字符串到文件 (Ruby on Rails) - 未定义的方法 `unpack' 错误

ruby-on-rails - 禁用 IP 地址记录 Rails

javascript - 为话语添加新功能

mysql - Rails - 如何强制关联使用别名表名

ruby-on-rails - 计算和检索多态关联的对象

ruby-on-rails - ActiveRecord:属性存在的范围