2

我读了这个

我尝试过这个:

class Product < ActiveRecord::Base
  has_many :variants
  def skus; variants.map(&:sku).join(' ') end

  multisearchable :against => [:name, :slug, :skus]
end

但我得到:

PgSearch::Multisearch.rebuild(Product)
ActiveRecord::StatementInvalid: PG::Error: ERROR:  column products.skus does not exist

我究竟做错了什么?我可以采取另一种选择吗?

4

2 回答 2

0

我最近也碰到了这个。multisearchreindex 方法假定所有能够反对的东西都是mutisearch数据库列,而不是方法。

这里有一个针对这种行为的问题: https ://github.com/Casecommons/pg_search/issues/157

解决此问题的最简单方法是multisearchable使用必须像这样评估的 proc 声明您的调用:

multisearchable :against => [:name, :slug, :skus],
                :if => proc{ true }

您可以在此处看到这如何改变重建策略。

您还可以rebuild_pg_search_documents按照自述文件中的说明重新定义模型上的方法:

def self.rebuild_pg_search_documents
  find_each { |record| record.update_pg_search_document }
end
于 2014-06-30T20:23:53.537 回答
0

在我的脑海中,skus 需要是范围,而不是方法。

我知道这是简短的答案,但没有足够的代表来添加评论。

于 2014-06-30T20:04:07.013 回答