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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
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.