Conditions and joins and paginate, oh my!


#1

I’m starting off with something that already works, and trying to add
another condition to it. I just can’t seem to find an example of the
proper syntax to make this happen.

In this case, I have users, and users have many contacts and contacts
have and belong to many groups. Up til now I’ve just been searching for
(and paginating) a set of contacts that belong to this user that are
“LIKE” my search term. Now I want to also limit the selection by which
groups a contact belongs to.

So far I’ve been finding a set of contacts to show like this:

@contacts = @current_user.contacts.paginate(:all, :conditions => [“name
LIKE ?”, search_term])

Now I want to add to that, a selection based on a group, so, in pseudo
syntax that might look something like this:

@contacts = @current_user.contacts.paginate(
:all,
:conditions => [“name LIKE ?”,
search_term],
:joins => :group,
:more_conditions => {:groups =>
{:group.id => selected_group}})

How do I hook these two different types of conditions together?

Thanks!


#2

Jeff,
Visit this page, it will really help you in solving your
problem
http://my.opera.com/learnror/blog/pagination-with-complex-queries
In case of any queries you can reply on that blog or on this form any
time.

Thanks & Regards,
Shahroon Ali K.


#3

shoni khan wrote:

Jeff,
Visit this page, it will really help you in solving your
problem
http://my.opera.com/learnror/blog/pagination-with-complex-queries
In case of any queries you can reply on that blog or on this form any
time.

Thanks & Regards,
Shahroon Ali K.

thanks very much. I will check it out.

jp


#4

Frederick C. wrote:

On 19 Dec 2008, at 07:29, Jeff P. wrote:

Shahroon Ali K.

thanks very much. I will check it out.

It is however terrible advice. Fetching all rows into memory and then
paginating that array could absolutely kill you.

You can merge conditions with the merge_conditions class method on
ActiveRecord::Base (which is private on 2.1, but not 2.2. You can
always call it from one of your model’s class methods. Or you can just
build up array based conditions by hand.

Fred

Thanks Fred,
Will that merge_conditions method deal with different styles of
conditions?, like:
:conditions => [“name LIKE ?”, search_term]
and
conditions => {:groups => {:group.id => selected_group}}

I don’t know how to translate either one of these into the other form.

thanks,
jp


#5

On 19 Dec 2008, at 07:29, Jeff P. wrote:

Shahroon Ali K.

thanks very much. I will check it out.

It is however terrible advice. Fetching all rows into memory and then
paginating that array could absolutely kill you.

You can merge conditions with the merge_conditions class method on
ActiveRecord::Base (which is private on 2.1, but not 2.2. You can
always call it from one of your model’s class methods. Or you can just
build up array based conditions by hand.

Fred