Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 使用PG search gem时,如何按关联过滤结果?_Ruby On Rails_Ruby_Activerecord_Pg_Pg Search - Fatal编程技术网

Ruby on rails 使用PG search gem时,如何按关联过滤结果?

Ruby on rails 使用PG search gem时,如何按关联过滤结果?,ruby-on-rails,ruby,activerecord,pg,pg-search,Ruby On Rails,Ruby,Activerecord,Pg,Pg Search,我正在Rails应用程序中使用PG搜索gem。假设我的控制器中有一组文章: @articles = Article.search(params[:search]).with_pg_search_highlight 这里PG搜索的问题是我得到的是一个数组,而不是AR对象。所以现在我不能做这样的事情 @research_articles = @articles.where(category: 'research') 因为我会得到一份工作 undefined method `where' for

我正在Rails应用程序中使用PG搜索gem。假设我的控制器中有一组文章:

@articles = Article.search(params[:search]).with_pg_search_highlight
这里PG搜索的问题是我得到的是一个数组,而不是AR对象。所以现在我不能做这样的事情

@research_articles = @articles.where(category: 'research')
因为我会得到一份工作

undefined method `where' for Array

现在,我可以从一个操作中进行多个查询,但是对于这个问题,有什么更好的解决方案呢?

如何更改链

@articles = Article.where(category: 'research').search(params[:search]).with_pg_search_highlight
编辑:

不进行两次查询的方法是:

@found_articles = Article.search(params[:search]).with_pg_search_highlight
@research_articles = @found_articles.select { |article| article.category == "research" }

换一条链子怎么样

@articles = Article.where(category: 'research').search(params[:search]).with_pg_search_highlight
编辑:

不进行两次查询的方法是:

@found_articles = Article.search(params[:search]).with_pg_search_highlight
@research_articles = @found_articles.select { |article| article.category == "research" }

您可能应该定义一个作用域(或者在这里简单的getter就足够了)并重用它:

def simple_search
  pure = Article.search(params[:search])
  (block_given? ? yield(pure) : pure).with_pg_search_highlight
end
然后:

@articles = simple_search
@research_articles = simple_search { |ss| ss.where(category: 'research') }

您可能应该定义一个范围(甚至简单的getter在这里就足够了),然后重用它:

def simple_search
  pure = Article.search(params[:search])
  (block_given? ? yield(pure) : pure).with_pg_search_highlight
end
然后:

@articles = simple_search
@research_articles = simple_search { |ss| ss.where(category: 'research') }

pg_搜索gem提供pg_搜索范围

见医生


您还可以将where条件与pg_search_作用域链接。

pg_search gem提供pg_search_作用域

见医生


您还可以使用pg_search_scope链接where条件。

是的,问题是我需要获取所有结果并在事实之后进行筛选。是的,问题是我需要获取所有结果并在事实之后进行筛选。这与articles=Article.search(params[:search])有什么不同。使用pg_search_highlight;research_articles=Article.where(category:'research').search(params[:search])。使用_pg_search_highlight不会,但它可能有助于干燥50个不同的搜索。另外,意图更为明确。它与articles=Article.search(params[:search])有什么不同;research_articles=Article.where(category:'research').search(params[:search])。使用_pg_search_highlight不会,但它可能有助于干燥50个不同的搜索。此外,意图更加明确。