假设我有一个带有 :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_any
至 email_includes
关于ruby-on-rails - Activeadmin:如何过滤匹配两个或多个搜索词的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33309759/