1

我的模型有以下范围:

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

任何线索可能是什么?提前致谢

4

1 回答 1

3

我是 pg_search 的作者和维护者。

不幸的是,在纯 SQL 中不可能在这个方向上遍历多态关联,因此使用 pg_search 进行搜索是不可能的。

您可以做的一件事是从其他记录中计算文本并将其缓存到 Cloth 表上的列中,然后对其进行搜索。每当 Cloth 上的多态外键更改或 Owner 记录上的内容更改时,您都必须小心更新它。

希望我可以改进错误消息,使其不会那么混乱。感谢您指出了这一点。

于 2013-03-16T21:41:08.230 回答