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