def suggest(fields, word, treshold = nil)
similar_results = []
unless treshold
if word.size <= 4
treshold = 1
else
treshold = word.size/3
end
end
if fields.kind_of?(Array)
conditions = ""
param_hash = {}
fields.each_with_index do |field, i|
param_hash[field] = word
if fields.size > 1 && i < fields.size - 1
conditions += "#{field} = :#{field} OR "
else
conditions += "#{field} = :#{field}"
end
end
search_results = self.find(:all, :conditions => [conditions, param_hash])
else
search_results = self.find(:all, :conditions => ["#{fields} = ?", word])
end
if search_results.empty?
all_results = self.find(:all)
unless all_results.empty?
all_results.each do |record|
if fields.kind_of?(Array)
fields.each {|field| similar_results << record.send(field).to_s if record.send(field).to_s.similar?(word, treshold)}
else
similar_results << record.send(fields).to_s if record.send(fields).to_s.similar?(word, treshold)
end
end
end
return similar_results.uniq
else
return search_results
end
end