Я использую ruby на рельсах с активной записью ORM вместе с базой данных postgreSQL.У меня есть поисковое действие в одном из моих контроллеров, подобное этому.
def search
query = params[:q]
query_regexp_str = ".?(" + query.split("").join(").?(") + ").?"
query_regexp = Regexp.new(query_regexp_str)
results = Company.where("symbol ~* ?", query_regexp_str)
render json: results, each_serializer: CompanySearchSerializer
end
Это очень слабо сопоставляет символы компании с входным запросом.Он работает нормально, за исключением того, что иногда символ, который полностью соответствует запросу, появляется где-то посередине результатов, ожидаемых из приведенного выше кода.
Я думал написать что-то вроде этого.
def search
query = params[:q]
query_regexp_str = ".?(" + query.split("").join(").?(") + ").?"
query_regexp = Regexp.new(query_regexp_str)
full_match_results = Company.where(symbol: query)
other_results = Company.where("symbol ~* ?", query_regexp_str)
# Somehow concatenate the two and put it in results variable
render json: results, each_serializer: CompanySearchSerializer
end
Примечание: Я не хочу использовать методы массива ruby, такие как +
, и писать что-то вроде этого: results = full_match_results + other_results
, потому что я хочу воспользоваться SQL и Active Record и только в конце преобразуйте результаты в json.
Являются ли отношения активной записи связанными, и поэтому я не имею в виду использование merge
или or
метода.Если нет, есть ли лучший способ сделать это?