ThinkingSphinx:过滤关联的布尔列

时间:2012-10-22 17:04:25

标签: associations ruby-on-rails-3.2 sphinx thinking-sphinx

我认为没有理由不这样做,但我没有结果。 Contact有很多OrganizationContactsOrganizationContact有一个布尔字段primary。我在这个字段上添加了一个过滤器,如下所示。

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 }
[]

任何人都可以解释一下吗?

1 个答案:

答案 0 :(得分: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 }

这让我感到肮脏和困惑,但它确实起到了作用。