I have often wished to add a trivial search capability to my controllers which would allow searching on different fields. Without getting into a mess of many different if statements each of which has a different set of conditions, I use something much like the following:
def index
cond_hash = {}
cond_strings = []
if params[:search]
cond_hash[:login] = "%#{params[:search]}%"
cond_hash[:email] = "%#{params[:search]}%"
cond_strings << "(login ILIKE :login OR email ILIKE :email)"
end
if params[:search_address]
cond_hash[:address] = params[:search_address]
cond_strings << "(address == :address)"
end
conditions = cond_strings.join(" AND ")
@users = User.all :conditions => [ conditions, cond_hash ]
end
It may be safer to use users.login, users.email, and
users.address in the SQL-like strings above.
No comments:
Post a Comment