2012-10-22 1 views
0

Я не вижу причин, почему это не должно работать, но я не получаю никаких результатов. A Contact имеет много OrganizationContacts. И OrganizationContact имеет булево поле primary. Я добавил фильтр в это поле, как показано ниже.ThinkingSphinx: фильтр в булевом столбце ассоциации

class Contact < ActiveRecord::Base 

    has_many :organization_contacts, :dependent => :destroy 

    define_index do 
    has organization_contacts(:primary), :as => :primary_contacts 

    set_property :delta => true 
    end 
end 

В сеансе отладки я вижу, что у меня действительно есть Contact с OrganizationContact который указан в качестве primary:

(rdb:1) p Contact.first.organization_contacts.first.primary 
true 

Но если я делаю ThinkingSphinx поиска с помощью этого фильтра, я получаю ничего:

(rdb:1) p Contact.search :with => { :primary_contacts => true } 
[] 

Может ли кто-нибудь объяснить?

ответ

0

Крикет чириканье. Увы, мы придумали работу.

class Contact < ActiveRecord::Base 

    has_many :primary_organization_contacts, :class_name => "OrganizationContact", :foreign_key => "contact_id", :conditions => { :primary => true } 
    has_many :organization_contacts, :dependent => :destroy 

    define_index do 
    has primary_organization_contacts(:id), :as => :primary_organization_contacts 

    set_property :delta => true 
    end 
end 

Поиск по ним - интересная деталь. Если я хочу записи без каких-либо первичных организации контактов:

Contact.search :with { :primary_organization_contacts => 0 } 

Если я хочу записи по крайней мере один первичный контакт организации:

Contact.search :without { :primary_organization_contacts => 0 } 

Это заставляет меня чувствовать себя грязным и запутанным, но это делает работу.