pg_search与关联的模型字段

时间:2013-11-20 22:19:56

标签: ruby-on-rails pg-search

我看了this

我试过了:

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

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

2 个答案:

答案 0 :(得分:0)

在我的头顶,skus需要是范围,而不是方法。

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

答案 1 :(得分:0)

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

此处存在针对此行为的问题: https://github.com/Casecommons/pg_search/issues/157

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

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

您可以看到它如何更改重建策略here

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

def self.rebuild_pg_search_documents
  find_each { |record| record.update_pg_search_document }
end