Isn't the case where a simple "group by X having count(*) = 2" could handle
the problem ?

Arel can achieve this query easily.

On Wed, Aug 8, 2012 at 2:27 PM, Pedro Nascimento <pnascime...@gmail.com>wrote:

> Take a look at ARel and Squeel gem. Squeel gem supports something like
> this already.
>
> On Wed, Aug 8, 2012 at 12:05 PM, Rafael Almeida <almeida...@gmail.com>wrote:
>
>> Hello.
>>
>> Let's say I have the following schema
>>
>>     People <---> people_services <---> services
>>
>> That is, people has a many-to-many relationship with services. Say I want
>> to find all people who has services of types 1 and 2. How can we do it on
>> activerecord today?
>>
>> My best solution so far is this
>>
>>     people_query = Person.joins(:services)
>>     people = []
>>     [1,2].each do |t|
>>         people << people_query.where(:type => 1)
>>     end
>>     people = people.reduce(:&)
>>
>> That's not so good because by doing reduce(:&) you're exiting
>> activerecord domain. So you wouldn't be able to do something like
>> people.reduce(:&).limit(10). Also, that way I'm loading a lot more data
>> than I actually need in my application memory. So, certainly not optimal
>> solution.
>>
>> It's possible to make such query in SQL alone, if the dbms supports
>> INTERSECTION then doing it is straightforward. If it doesn't, it's still
>> possible using joins on subqueries.
>>
>> I think activerecord ought support such query and I'm willing to take my
>> time and write the code for it. However, I'd like someone to help me out
>> with it a bit. I don't understand rails or activerecord code base so well.
>> Anyway, it would be best if I did a gem that introduces that feature into
>> activerecord. Can anyone tell me what should I look up? A high level
>> description of what I must do would be great. Something like "You'll need
>> to create a gem, monkey patch this activerecord class, probably use this
>> and this function to help you writing your SQL" would be nice.
>>
>> Cheers
>>
>> --
>> You received this message because you are subscribed to the Google Groups
>> "Ruby on Rails: Core" group.
>> To view this discussion on the web visit
>> https://groups.google.com/d/msg/rubyonrails-core/-/jz3f6lJrXEkJ.
>> To post to this group, send email to rubyonrails-core@googlegroups.com.
>> To unsubscribe from this group, send email to
>> rubyonrails-core+unsubscr...@googlegroups.com.
>> For more options, visit this group at
>> http://groups.google.com/group/rubyonrails-core?hl=en.
>>
>
>  --
> You received this message because you are subscribed to the Google Groups
> "Ruby on Rails: Core" group.
> To post to this group, send email to rubyonrails-core@googlegroups.com.
> To unsubscribe from this group, send email to
> rubyonrails-core+unsubscr...@googlegroups.com.
> For more options, visit this group at
> http://groups.google.com/group/rubyonrails-core?hl=en.
>



-- 
Att,
Everton
http://www.evertonmoreth.com.br

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Core" group.
To post to this group, send email to rubyonrails-core@googlegroups.com.
To unsubscribe from this group, send email to 
rubyonrails-core+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-core?hl=en.

Reply via email to