以SQL友好的方式连接两个ActiveRecord :: Relation实例

时间:2019-02-28 00:01:07

标签: sql ruby-on-rails ruby postgresql activerecord

我正在使用活动记录为ORM的rails上的ruby,以及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

注意:我不想使用诸如+之类的红宝石数组方法并编写如下内容:results = full_match_results + other_results,因为我想利用 SQL Active Record ,仅在最后将结果转换为json。

活动记录关系是可串联的,并且我并不是说使用mergeor方法。如果没有,是否有更好的方法来实现这一目标?

0 个答案:

没有答案