使用pg_search与多态关联的问题

时间:2013-03-12 14:47:07

标签: ruby-on-rails ruby-on-rails-3 postgresql pg-search

我的模型有以下范围:

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

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

1 个答案:

答案 0 :(得分:3)

我是pg_search的作者和维护者。

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

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

希望我能改进错误信息,这样就不会那么混乱了。谢谢你指出这一点。