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を使用してその検索を行うことはできません。

実行できることの1つは、他のレコードからテキストを計算し、それをClothテーブルの列にキャッシュしてから、代わりにそれを検索することです。Clothでポリモーフィック外部キーが変更されるか、Ownerレコードでコンテンツが変更されるたびに、注意して更新する必要があります。

うまくいけば、それほど混乱しないようにエラーメッセージを改善することができます。これを指摘してくれてありがとう。

于 2013-03-16T21:41:08.230 に答える