ruby-on-rails – 用ransacker自定义搜索

我试图添加自定义过滤器到ActiveAdmin,这是由Ransack这些天.不幸的是,赎金根本没有记录,从网上的少数资源我一起摸索以下(在用户模型):
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 :full_text_in,label: 'full text search',as: :string

过滤器本身工作,所以过滤tom将列出所有匹配的记录.但是,过滤器输入中的值切换到[“tom”].

在应用过滤器之前:

应用过滤器后:

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

解决方法

有一个等待合并的可交付范围的功能
https://github.com/activerecord-hackery/ransack/pull/288

更新:

我已经与PRhttps://github.com/activerecord-hackery/ransack/pull/390合并了avit和glebm的工作,因此现在可以使用Ransack的范围.有关文档,请参阅commit:

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.

相关文章

以下代码导致我的问题: class Foo def initialize(n=0) @n = n end attr_accessor :n d...
这是我的spec文件,当为上下文添加测试“而不是可单独更新用户余额”时,我得到以下错误. require 's...
我有一个拦截器:DevelopmentMailInterceptor和一个启动拦截器的inititializer setup_mail.rb. 但我想将...
例如,如果我有YAML文件 en: questions: new: 'New Question' other: recent: ...
我听说在RSpec中避免它,let,let !,指定,之前和主题是最佳做法. 关于让,让!之前,如果不使用这些,我该如...
我在Rails中使用MongoDB和mongo_mapper gem,项目足够大.有什么办法可以将数据从Mongoid迁移到 Postgres...