There's plenty of specs for testing this (towards the end of attribute_spec.rb) - feel free to add one for drilling through associations to HABTM joins (seems it's using the first join as a check instead of the last?) - I'll try to get to it when I have time though :)
-- Pat On 02/06/2009, at 11:36 PM, James Healy wrote: > > Pat, > > The changes to :source => :query MVAs in 1.1.19 have improved this > situation, but some cases still aren't working the way I expected. > However I'm realising that maybe I need to adust my expectations. > > My Edition model habtm Tags. If I use :source => :query to add the tag > ids to my Edition index then I get the result I expected. A query that > returns edition_id and tag_id pairs. > > has tags(:id), :as => :tag_ids, :source => :query > > sql_attr_multi = uint tag_ids from query; SELECT > `editions_tags`.`edition_id` * 12 + 3 AS `id`, > `editions_tags`.`tag_id` AS `tag_ids` FROM `editions_tags` > > If I try to add supplier tags to the Edition index however, I end up > with a source query that returns supplier_id and tag_id pairs. > > has supplier.tags(:id), :as => :tag_ids, :source => :query > > sql_attr_multi = uint tag_ids from query; SELECT > `suppliers_tags`.`supplier_id` * 12 + 3 AS `id`, > `suppliers_tags`.`tag_id` AS `tag_ids` FROM `suppliers_tags` > > In the second case I was hoping to get edition_ids and tag_ids as > well. > The issue is presumably that I'm using :source => :query on a nested > association. Am I barking up the wrong tree? > > James > > > James Healy wrote: >> >> Sorry Pat, got another one for you :) >> >> I think :source => :query generates an incorrect config file when the >> attribute being indexed is through a has_and_belongs_to_many >> association. >> >> As I understand it, the query should return a list of edition_id, >> tag_id >> pairs? >> >> My index definition for my Edition class contains the following >> attribute line: >> >> has tags(:id), :as => :tag_ids, :source => :query >> >> which generates this line in my sphinx config: >> >> sql_attr_multi = uint tag_ids from query; SELECT >> `tags`.`edition_id` * 12 + 0 AS `id`, `tags`.`id` AS `tag_ids` FROM >> `tags` >> >> This is close, but my tags table doesn't have an edition_id field. >> >> To confuse TS even more, if I try the following line in my edition: >> >> has supplier.tags(:id), :as => :tag_ids, :source => :query >> >> I get this line in my config: >> >> sql_attr_multi = uint tag_ids from query; SELECT >> `tags_suppliers`.`supplier_id` * 12 + 0 AS `id`, >> `tags_suppliers`.`id` AS `tag_ids` FROM `tags_suppliers` >> >> The first field should be the edition id, and the second refers to >> a non >> exiting tags_suppliers.id. >> >> -- James Healy <jimmy-at-deefa-dot-com> Wed, 13 May 2009 18:10:59 >> +1000 >> >>> > > > --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---
