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 -~----------~----~----~----~------~----~------~--~---
