Custom search with ransacker

随声附和 提交于 2019-11-28 22:24:08

问题


I'm trying to add a custom filter to ActiveAdmin which is powered by Ransack these days. Unfortunately, ransacker is not documented at all and from the few resources online I fumbled together the following (in the User model):

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

The search_in_all_translated method returns an array of users which match the search string across all translated attributes.

On the admin page, the following filter is defined:

filter :full_text_in,
  label: 'full text search',
  as: :string

The filter itself works, so filtering tom will list all matching records. However, the value in the filter input switches to ["tom"].

Before applying the filter:

After applying the filter:

Any ideas how to fix this?


回答1:


There's a feature for ransackable scopes waiting to be merged: https://github.com/activerecord-hackery/ransack/pull/288

UPDATE:

I've given the work of avit and glebm another go with PR https://github.com/activerecord-hackery/ransack/pull/390 which has been merged, it's therefore now possible to use scopes with Ransack. For the documentation, see the commit:

https://github.com/svoop/ransack/commit/72dd5d12d58919bf37199234cf13f9533f3b8cd5

Here's a real-life example:

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

In this example search_in_all_translated returns some complex indexed full text search SQL.




回答2:


in or cont_any do a search via an array. So in this case, it's doing a search Model.where(something: ["tom", "tom1", "tom2"] and because of the way the params[:q] works, it returns it to your input as an array. A quick and dirty fix I did to help user experience is added value: nil, to the input form



来源:https://stackoverflow.com/questions/22473391/custom-search-with-ransacker

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!