Once again, I’m not involved enough in the rails community to know if something like this has already been done, but I thought it was kind of cool. It’s a generic search system for ActiveRecords:
def searcher_find(paramname, model)
conds = []
condvals = []
columns = model.column_names
params[paramname].each do |k, v|
ks = k.to_s
if columns.include? ks
col = model.columns_hash[ks]
case col.type
when :text
conds << " #{k} like ? "
condvals << "%#{v}%"
when :integer
if v != ""
conds << " #{k} = ? "
condvals << v.to_i
end
when :float
if v != ""
conds << " #{k} = ? "
condvals << v == v.to_f
end
end
end
end
return model.find(:all, :conditions => [conds.join(' and '), *condvals])
end
You would call it like so: @products = searcher_find(:product, Product)
. The above version is just the “simplest thing that could possibly work”, and probably needs fixing, but I thought I’d write it down so that others could take it and use it.