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.
–
If you can’t believe in God the chances are your God is too small.
Read my blog: http://joshuajava.wordpress.com/
Follow me on twitter: http://twitter.com/jpartogi
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
On Mar 1, 1:35 am, Michael G. [email protected] wrote:
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.
Thanks heaps.
Joshua P. wrote:
Wow this is a very clean approach. Trying this one out.
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