2016-05-11 3 views
0

В 4 приложении Rails, я связанные модели Истца и товарные знаки, с последним возможностью поиска с помощью Searchkick:Как найти нулевое значение с помощью Searchkick?

class Applicant < ActiveRecord::Base 
    has_many :trademarks 
end 

class Trademark < ActiveRecord::Base 
    belongs_to :applicant 
    searchkick 
end 

Я пытаюсь найти примеры товарных знаков, которые не имеет заявителя. Использование стандартного ActiveRecord ниже запрос работает, и возвращает торговую марку без Заявителя:

Trademark.where(applicant: nil).count 
    (1.7ms) SELECT COUNT(*) FROM "trademarks" WHERE "trademarks"."applicant_id" IS NULL 
=> 1 

Как я могу запустить эквивалентный запрос с добавлением SearchKick?

# these queries run correctly and show that SearchKick is working 
Trademark.search "*" # => 7 records 
Trademark.search "*", where: {status: "Removed"} # => 5 records 

# When trying to search for applicant == nil, the search fails: 

# this returns 7 records, instead of the 1 expected result 
Trademark.search "*", where: {applicant: nil} 

# this returns 0 records, instead of the 1 expected result 
Trademark.search "*", where: {applicant_id: nil} 

Как я могу использовать предложение where для значения nil в SearchKick?

ответ

0

Ответ пришел от Эндрю Кейна, разработчика драгоценного камня SearchKick.

Мне нужно было запустить Trademark.reindex() для синхронизации базы данных и ElasticSearch. После этого синтаксис Trademark.search "*", where: {applicant_id: nil} работал должным образом.