我的模型有以下范围:

class Cloth < ActiveRecord::Base
  include Ownerable
  has_many :cloth_tags, :dependent => :destroy

  pg_search_scope :full_search,
    associated_against: {
      cloth_tags: [:name, :brand_name]
    },
    against: [:name, :description],
    ignoring: :accents,
    using: {
      tsearch: {
        dictionary: "spanish",
        any_word: true
      }
    }

所以,如果我调用类似Cloth.full_search('shirt')的函数可以很好地工作,但是如果我将owner: [:name]添加到associated_against散列中,它就会抛出NameError: uninitialized constant Cloth::Owner。内德莱斯说,业主关系在正常情况下是有效的。在任何情况下都是在这样的模块中定义的:
module Ownerable

  extend ActiveSupport::Concern

  included do
    belongs_to :owner, :polymorphic => true
  end

有什么线索吗?提前谢谢

最佳答案

我是pg_search的作者和维护者。
不幸的是,在纯SQL中不可能在这个方向遍历多态关联,所以在pg_search中不可能进行这种搜索。
您可以做的一件事是计算其他记录中的文本,并将其缓存到Cloth表上的列中,然后根据该列进行搜索。当Cloth上的多态外键或所有者记录上的内容发生更改时,您必须小心更新它。
希望我能改进错误信息,这样就不会那么混乱了。谢谢你指出这一点。

10-01 06:59