У меня есть база данных с Lab-моделями. Я хочу, чтобы их можно было искать с помощью нескольких разных методов.Rails расширенный поисковый запрос
Я решил использовать одно поле ввода и отдельный запрос в слове массив:
search = search.split(/[^[[:word:]]]+/).map{|val| val.downcase}
я использую Деяния-как-taggable драгоценного камня, поэтому было бы неплохо включить эти тег в поисках к:
tag_results = self.tagged_with(search, any: true, wild: true)
для методов вниз ниже его, казалось, необходимо использовать:
search = search.map{|val| "%#{val}%"}
Веснушка, казалось, также отличный способ пойти для полнотекстового поиска так
full_text_search = self.search {fulltext search} full_text_results = full_text_search.results
я решил пойти также с поиском простой запрос к базе данных для лаборатории имени:
name_results = self.where("LOWER(name) ILIKE ANY (array[?])", search)
Наконец, мне нужны все результаты в одном массиве так:
result = (tag_results + name_results + full_text_results).uniq
Он отлично работает (я имею в виду, что результат - это то, что я ожидаю), но он возвращает простой массив, а не ActiveRecord::Relation
, поэтому нет возможности использовать метод, например .select()
или .order()
.
Я хочу спросить, есть ли лучший способ реализовать такой поиск? Я искал поисковые системы, но, похоже, нет ничего, что бы соответствовало моей идее.
Если нет - есть ли способ преобразования массива в ActiveRecord :: Relation? (SO говорит, что нет никакого способа)
Вы также можете просто использовать 'select' и' sort' или 'sort_by' Enumerable в массиве результатов – DiegoSalazar
@ diego.greyrobot, который медленный, как черт :) OP полностью прав, желая преобразовать его в AR –
Что именно является «tag_result» или другим результатом? –