Конкат два ActiveRecord :: Relation экземпляры в дружественном для SQL способ - PullRequest
0 голосов
/ 28 февраля 2019

Я использую 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 метода.Если нет, есть ли лучший способ сделать это?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...