Rails高级搜索查询

安辛克

我有一个带有Lab模型的数据库。我希望能够使用多种不同的方法来搜索它们。

  1. 我选择使用一个输入字段并将查询分为单词数组:

    search = search.split(/[^[[:word:]]]+/).map{|val| val.downcase}
    
  2. 我使用Acts-as-taggable gem,因此最好在搜索中包含这些标签以:

    tag_results =  self.tagged_with(search, any: true, wild: true)
    
  3. 对于低于以下的方法,似乎有必要使用:

    search = search.map{|val| "%#{val}%"}
    
  4. 太阳黑子似乎也是进行全文搜索的好方法,因此

    full_text_search = self.search {fulltext search}
    full_text_results = full_text_search.results
    
  5. 我决定也通过简单的数据库查询来搜索实验室名称:

    name_results = self.where("LOWER(name) ILIKE ANY ( array[?] )", search)
    
  6. 最后,我需要将所有结果都放在一个数组中,以便:

    result = (tag_results + name_results + full_text_results).uniq
    

它完美(我的意思是,结果是我期望的那样),但它返回一个简单的数组,而不是ActiveRecord::Relation所以没有办法,我用的方法一样.select().order()对结果。

我想问一下,有没有更好的方法来实现这种搜索?我在搜索搜索引擎,但似乎没有什么适合我的想法。

如果没有-有没有办法将数组转换为ActiveRecord :: Relation?(所以说没有办法)

安德烈·德尼科(Andrey Deineko)

回答这个:

有没有一种方法可以将数组转换为ActiveRecord :: Relation?(所以说没有办法)

您可以通过从数组中获取ID并向您的AR模型查询具有以下ID的对象,从而将数组从ActiveRecord对象转换为ActiveRecord :: Relation。

Model.where(id: result.map(&:ids)) # returns AR, as expected.

这是我所知道的唯一方法。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章