Есть задача в базе есть всякие записи типа "ВБ321", "ВБ.3.2.а-12". Надо уметь искать так, чтобы поиск игнорировал точки, запятые, пробельные символы и работал без учёта регистра.
Я сделал это так. Я выгружаю все объекты, среди которых идёт поиск. Потом удаляю все лишние символы из поискового запроса, а далее перебираю каждый элемент так: удаляю из title и sign все лишние символы и сравниваю с почищенной поисковой строкой.
reg = Regexp.new("[-!
reg = Regexp.new("[-!\"#\$\%&'()*+,./:;<=>?@\[\\\]^_`{|}~\s]+")
escaped_search = params[:search].gsub(reg,"").downcase
@items = Item.all.find_all{|i| i.title.gsub(reg,"").downcase[escaped_search] || i.sign.gsub(reg,"").downcase[escaped_search]}
quot;#\$\%&'()*+,./:;<=>?@\[\\]^_`{|}~\s]+")
escaped_search = params[:search].gsub(reg,"").downcase
@items = Item.all.find_all{|i| i.title.gsub(reg,"").downcase[escaped_search] || i.sign.gsub(reg,"").downcase[escaped_search]}
Но мне кажется это не очень оптимально. У меня есть ощущение, что гораздо разумнее использовать для этих дел SQL. Вопрос только как это сделать?
|