Try adding the following:
   has contacts.user_id, :as => :user_id

This is what TS complains about when you try user.contacts.search - it  
needs a reference attribute to filter contacts by a given user.

-- 
Pat

On 22/08/2009, at 1:30 AM, gobigdave wrote:

>
> In far more simple terms, is there a way I can do:
>
> User.first.contacts.search('dave')
>
> That would be ideal, but I haven't been able to find the right  
> indexes/
> has combinations.
>
> On Aug 21, 5:17 pm, gobigdave <[email protected]> wrote:
>> I have classes like:
>>
>> class Person < ActiveRecord::Base
>>   has_many :relationships, :class_name =>  
>> "Relationship", :foreign_key
>> => "user_id", :dependent => :delete_all
>>   has_many :owner_relationships, :class_name =>
>> "Relationship", :foreign_key => "person_id", :dependent  
>> => :delete_all
>>   has_many :owners, :through => :owner_relationships, :source  
>> => :user
>> end
>>
>> class Contact < Person
>> end
>>
>> class User < Person
>>   has_many :people, :through => :relationships, :source => :person
>>   has_many :contacts, :through => :relationships, :source
>> => :person, :conditions => ["relationships.kind = ?",
>> Relationship::CONTACT]
>>   has_many :colleagues, :through => :relationships, :source
>> => :person, :conditions => ["relationships.kind = ?",
>> Relationship::COLLEAGUE]
>>
>>   define_index do
>>     has owners(:id), :as => :owners
>>     has owner_relationships.kind, :as => :owners_kind
>>   end
>> end
>>
>> class Relationship < ActiveRecord::Base
>>   belongs_to :user,   :class_name => "Person", :foreign_key =>
>> "user_id"
>>   belongs_to :person, :class_name => "Person", :foreign_key =>
>> "person_id"
>> end
>>
>> Essentially, users have contacts and colleagues. Colleagues can only
>> be other users, but Contacts can be any Person. My problem is that I
>> can't get data to match up. For example:
>>
>> user = User.first
>> user.contacts.count # => 128
>>
>> but
>>
>> user = User.first
>> people = Person.search(:with => { :owners => user.id, :owners_kind =>
>> Relationship::CONTACT })
>> people.total_entries # => 140
>>
>> The search returns people that have COLLEAGUE relationships, and I
>> can't make it stop. Any idea how I can limit my search to a user's
>> contacts or colleagues? I tried adding another has_many  
>> contact_owners
>> to Person, and then adding a separate index, but that didn't work
>> either. Looking at the SQL in the sphinx.conf file, it looks like two
>> joins are made to the relationships table - once with a kind  
>> condition
>> and one without. Am I doing something wrong, or is there a bug here?
>>
>> It would be great to be able to do user.contacts.search and have it
>> work. I tried it but TS complains about a missing user_id foreign  
>> key.
> >


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Thinking Sphinx" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/thinking-sphinx?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to