0

我看不出为什么这不应该起作用,但我没有得到任何结果。AContact有很多OrganizationContacts。并且OrganizationContact有一个布尔字段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

在调试会话中,我可以看到我确实有一个ContactOrganizationContact列为primary

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

但是,如果我ThinkingSphinx使用该过滤器进行搜索,我什么也得不到:

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

谁能解释一下?

4

1 回答 1

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 }

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

于 2012-11-14T21:22:29.147 回答