Adding the conditions when parameter is available

Hi all,

How do we add a conditions in a ActiveRecord find method when the parameter is available?

Lets say I want to add this category conditions when the parameter from the client: Product.find(:all, :conditions => [ "c.id = ?", params[:catid])

Can we dynamically add that conditions to the find method when it is available? Or do I have to manually make an conditional statement when the parameter is available then give a different find method?

Thanks in advance.

I often do the brute-force approach:

  cond_string =   cont_hash = {}

  if params[:search_name]     cond_string << "(name ILIKE :name)"     cond_hash[:name] = "%#{params[:search_name]}%"   end   if params[:search_address]     cond_string << "(address ILIKE :name)"     cond_hash[:address] = "%#{params[:search_address]}%"   end

conditions = cond_string.join(" AND ") Person.all :conditions => [ conditions, cond_hash ]

--Michael

I often do the brute-force approach:

cond_string = cont_hash = {}

if params[:search_name] cond_string << "(name ILIKE :name)" cond_hash[:name] = "%#{params[:search_name]}%" end if params[:search_address] cond_string << "(address ILIKE :name)" cond_hash[:address] = "%#{params[:search_address]}%" end

conditions = cond_string.join(" AND ") Person.all :conditions => [ conditions, cond_hash ]

The merge_conditions method (which was protected in previous versions of rails) and the scoped named_scope are also handy for this sort of thing.

Fred.

Wow this is a very clean approach. Trying this one out. :slight_smile:

Thanks heaps.

Joshua Partogi wrote:

Wow this is a very clean approach. Trying this one out. :slight_smile:

  cond_string =   cont_hash = {}

  if params[:search_name]     cond_string << "(name ILIKE :name)"     cond_hash[:name] = "%#{params[:search_name]}%"   end

It also prevents SQL injection attacks:

   http://imgs.xkcd.com/comics/exploits_of_a_mom.png