假设我有一个带有:email字段的User类。假设我正在使用activeadmin来管理用户。
创建一个过滤器以返回匹配一个字符串的电子邮件(例如“史密斯”)非常简单。在中admin/user.rb
,我只包括一行
filter :email
这给了我一个完成此工作的过滤器小部件。
但是,此过滤器不允许我搜索多个术语的交集。我可以搜索包含“ smith”的电子邮件,但不能搜索同时包含“ smith”和“ .edu”的电子邮件。
Google告诉我,activerecord在幕后使用Ransack,而Ransack演示具有“高级”模式,允许进行多个术语搜索。
将多词搜索小部件带入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
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句