1. There are many other cases where I search for Users or People, so I
put the index on Person.

2. Yeah, I figured this was the issue. I was hoping O could figure out
a way to choose the unique association record (like I can with a db),
but it doesn't look to be possible. My other thought was to add some
indexes to the Relationship model and do some of the searches directly
on that table. I would end up duplicating data, but it might work.

On Aug 22, 8:54 am, Pat Allan <[email protected]> wrote:
> On 22/08/2009, at 4:24 AM, gobigdave wrote:
>
> > Two problems I still have, however.
>
> > 1. Would rather search like User.first.contacts.search.
>
> See my other email in this thread. Although actually... if you're  
> searching on Contacts, not Users, shouldn't the define_index block  
> exist for the Contact model, not the User model? The STI relationships  
> makes this all a bit tricky, mind you.
>
> > 2. With a many-to-many relationship where there are additional
> > attributes on the association model, how do I filter by those
> > attributes. For example, in my example the Relationship model has a
> > created_at attribute. It would be great to sort on when the
> > relationship was created, but I can't get it to work. Is this
> > possible?
>
> The tricky part about this is that you'll have multiple created_at  
> values for a single record. If you can somehow use a single value  
> (either using custom SQL attributes), then sorting should work. Perhaps:
>
>    has 'MAX(relationships.created_at)', :as => :created_at, :type  
> => :datetime
>
>
>
> > On Aug 21, 8:30 pm, gobigdave <[email protected]> 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