簡體   English   中英

使用ransacker進行自定義搜索

[英]Custom search with ransacker

我正在嘗試向ActiveAdmin添加自定義過濾器,這些過濾器最近由Ransack提供支持。 遺憾的是, ransacker根本沒有記錄,而且從網上的少量資源中我偶然發現了以下內容(在用戶模型中):

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

更新:

我已經將avit和glebm的工作另外與PR https://github.com/activerecord-hackery/ransack/pull/390合並了,因此現在可以將范圍與Ransack一起使用。 有關文檔,請參閱提交:

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。

incont_any通過數組進行搜索。 所以在這種情況下,它正在搜索Model.where(something: ["tom", "tom1", "tom2"]並且由於params [:q]的工作方式,它將它作為數組返回到您的輸入我為幫助用戶體驗所做的快速而骯臟的修復是增值value: nil,輸入表單

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM