我正在使用活动记录为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。
活动记录关系是可串联的,并且我并不是说使用merge
或or
方法。如果没有,是否有更好的方法来实现这一目标?