2016-05-11 10 views
0

In einer Rails 4 app, ich habe Modelle Antragsteller und Warenzeichen im Zusammenhang mit letzteren durchsuchbar mit Searchkick:Wie suche ich mit Searchkick nach einem Nullwert?

class Applicant < ActiveRecord::Base 
    has_many :trademarks 
end 

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

Ich versuche Instanzen der Marke zu finden, die keine Anmelder haben. Unter Verwendung von Standardactive die folgenden Abfrage funktioniert, und gibt die Marke ohne Anmelder:

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

Wie kann ich die entsprechende Abfrage mit dem Zusatz von SearchKick laufen?

# 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} 

Wie kann ich eine Where-Klausel für einen Nullwert in SearchKick verwenden?

Antwort

0

Die Antwort kam von Andrew Kane, dem Entwickler des SearchKick-Edelsteins.

Ich musste Trademark.reindex() ausführen, um die Datenbank und ElasticSearch zu synchronisieren. Danach funktionierte die Syntax wie erwartet.