gem pg_search возвращает дубликаты

Я использую pg_search gem для поиска в модели и заметил, что некоторые поисковые запросы возвращают повторения того же результата.

class Client < ActiveRecord::Base
    include PgSearch::Model
    pg_search_scope :client_search, 
        against: [:name, :mindbody_id, :phone, :unique_mb], 
        associated_against: {
            address: [:phone, :street],
            user: [:email],
            location: [:name]
        },
        using: { 
            tsearch: { 
                prefix: true 
            }
        }
   ...
end

Когда я ищу Client.client_search("abc"), мой результирующий массив много раз содержит один и тот же Client. У каждой записи один и тот же идентификатор, и результаты кажутся неразличимыми.

Есть идеи, почему результат дублируется?


person Jeremy Thomas    schedule 27.01.2020    source источник
comment
Проблема заключалась в том, что рассматриваемый client имел 5 addresses, тогда как у них должен был быть только 1, что приводило к дублированию.   -  person Jeremy Thomas    schedule 27.01.2020


Ответы (1)


Вам нужно переместить часть against в associated_against в качестве столбцов поиска в связанных моделях.

pg_search_scope :client_search,
  associated_against: {
    client:   [:name, :mindbody_id, :phone, :unique_mb],
    address:  [:phone, :street],
    user:     [:email],
    location: [:name]
  },
  using: { 
    tsearch: { 
      prefix: true 
    }
  }
...
person Thang    schedule 27.01.2020
comment
После внесения этого изменения я получаю сообщение об ошибке: NoMethodError (undefined method 'table_name' for nil:NilClass) - person Jeremy Thomas; 27.01.2020