Как мне указать `associated_against` для ассоциации, которая имеет имя `as: ` в pg_search?

Итак, у меня есть модель Node со следующими ассоциациями:

class Node < ActiveRecord::Base
  belongs_to :family_tree
  belongs_to :user
  belongs_to :media, polymorphic: true, dependent: :destroy
  has_many :comments, dependent: :destroy
end

Ключевая ассоциация — это media, которая на самом деле является ассоциацией с Video. Вот так выглядит моя модель Video:

class Video < ActiveRecord::Base
  has_one :node, as: :media
end

Но я не могу понять, как указать это в моем pg_search_scope.

Я пробовал это:

  include PgSearch
  pg_search_scope :node_search, against: [:name, :user_id, :circa, :cached_user_tag_list, :cached_tagged_user_names],
    using: { tsearch: { any_word: true, dictionary: :english, prefix: true} },
    :associated_against => {
      video: [:description, :title]
    }

Но ошибка, которую я получаю, заключается в следующем:

Completed 500 Internal Server Error in 131ms (ActiveRecord: 41.6ms)    
NoMethodError - undefined method `table_name' for nil:NilClass:

Итак, когда я пытаюсь сделать так:

  include PgSearch
  pg_search_scope :node_search, against: [:name, :user_id, :circa, :cached_user_tag_list, :cached_tagged_user_names],
    using: { tsearch: { any_word: true, dictionary: :english, prefix: true} },
    :associated_against => {
      media: [:description, :title]
    }

Я получаю эту ошибку:

Completed 500 Internal Server Error in 126ms (ActiveRecord: 17.7ms)    
NameError - uninitialized constant Node::Media:

Как указать эту ассоциацию, или это пограничный случай, с которым pg_search не знает, как справиться?


person marcamillion    schedule 24.07.2015    source источник


Ответы (1)


Сопровождающий pg_search упомянул, что полиморфные ассоциации нельзя искать напрямую через SQL, и поэтому они недоступны для pg_search - https://stackoverflow.com/a/15455017.

person KVS    schedule 30.07.2015