Una opcion es mantener el string de la condicion y una hash con los parametros:
str_conditions => "email is not null"
h_conditions = {}
if !params[:group_ids].blank?
str_conditions += " and group_id in (?)"
h_conditions[:group_ids] = params[:groups_ids]
end
if !params[:manager_id].blank?
str_conditions += " and manager_id = ?"
h_conditions[:manager_id] = params[:manager_id]
end
User.find :all, :conditions => [str_conditions, h_conditions]
Pero se engorrina bastante, con tanto "+=" y con tanto "and" y con tanta hash.
Otra opcion más clara es tener cada grupo de condiciones separado, y utilizar luego el metodo merge_conditions de ActiveRecord::Base.
c1=(params[:group_ids].blank?) ? [] : ["group_id in (?)", params[:groups_ids]]
c2=(params[:manager_id].blank?) ? [] : ["manager_id = ?", params[:manager_id]]
User.find :all, :conditions => merge_conditions("email is not null", c1, c2)