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.
M_Graff
(M Graff)
March 1, 2009, 1:35am
2
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.
Thanks heaps.
Phlip
(Phlip)
March 1, 2009, 3:43am
5
Joshua Partogi 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