Hi Pat,

I only now had the opportunity to test it.
Solution 1 diodnt work for me, I got an unknown assoziation active_bs error.
Solution 2 works!! 
What I was missing was the SQL part in the has attribute ("SUM(bs.active) > 
0"). I didnt see the abillity to to that. It also works without the join 
statement.

Thanks a lot for pointing me to ths solution. It saved me a lot of time.

Cheers,
Gordon

On Saturday, July 14, 2012 1:18:13 PM UTC+2, Pat Allan wrote:
>
> Hi Gordon 
>
> Ah, that's a little tricky. There's three approaches I can think of. 
>
> Option A: add another association to A for just active Bs: 
>   has_many :active_bs, :class_name => 'B', :conditions => {:active => 
> true} 
>
> And then add a join to that association in your index, plus the attribute 
> using a bit of SQL. If you're using your original bs association somewhere, 
> you'll need to make sure you get the table alias correct in this SQL 
> snippet: 
>
>   define_index do 
>     join active_bs 
>     has "COUNT(bs.id) > 0", :as => :active_bs, :type => :boolean 
>   end 
>
> Option B (MySQL only!): Use the standard association, but put more 
> complexity into the SQL snippet: 
>
>   define_index do 
>     join bs 
>     has "SUM(bs.active) > 0", :as => :active_bs, :type => boolean 
>   end 
>
> Option C is just like B, but for PostgreSQL. This is where it gets 
> complex, as booleans are data types here: 
>
>   define_index do 
>     join bs 
>     has "SUM(CASE bs.active WHEN TRUE THEN 1 ELSE 0 END) > 0", :as => 
> :active_bs, :type => :boolean 
>   end 
>
> Hope one of these suits. 
>
> Cheers 
>
> -- 
> Pat 
>
> On 13/07/2012, at 2:56 PM, Gordon Friebe wrote: 
>
> > Hi, 
> > 
> > I have a Model A that is being indexed. Connected to model A via a 
> has_may relatiosnhip is model B. 
> > Model B has a boolean attribute active. 
> > 
> > My index needs an attribute that shows me whether there are any active 
> Bs connected to A. 
> > 
> > define index do 
> >   has bs, as: :active 
> > end 
> > 
> > So I need to do A.search with: {active: true}. 
> > 
> > How can this be done? I just cannot find how to do this with thinking 
> sphinx. 
> > Thanks a lot! 
> > 
> > Gordon 
> > 
> > -- 
> > You received this message because you are subscribed to the Google 
> Groups "Thinking Sphinx" group. 
> > To view this discussion on the web visit 
> https://groups.google.com/d/msg/thinking-sphinx/-/d4Kp9g2wAWoJ. 
> > 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. 
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Thinking Sphinx" group.
To view this discussion on the web visit 
https://groups.google.com/d/msg/thinking-sphinx/-/-hACDWVp-bQJ.
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