Полиморфная ассоциация Rails + Thinking-Sphinx - PullRequest
2 голосов
/ 27 ноября 2010
class User < ActiveRecord::Base
  has_many :followings, :as => :followable, :dependent => :destroy, :class_name => 'Follow'
  has_many :follows, :as => :follower, :dependent => :destroy

  define_index do
    has follows.followable(:id), :as => :followable_id
    has followings.follower(:id), :as => :follower_id
    has follows.followable(:type), :as => :followable_type
    has followings.follower(:type), :as => :follower_type
  end
end 
  1. вопрос: я не могу искать по типу (всегда пустой массив). Жук? Я хотел бы получить всех пользователей, у которых есть подписчики типа «ААА».

    User.search '',: with => {: follower_type => 'AAA'}

  2. вопрос: Почему я должен изменить свою ассоциацию, чтобы получить правильный результат (определение индекса): follow.followable (: id),: as =>: followable_id вместо followings.followable (: id),: as =>: followable_id Я хотел бы получить список подписчиков для пользователя с id = 1

    User.search: with => {: followable_id => 1} # Список подписчиков для пользователя с id = 1

Thx!

1 Ответ

2 голосов
/ 27 ноября 2010

Что касается первого вопроса - строковые фильтры не работают в Sphinx. Это должно измениться в будущем (с Sphinx 1.10-beta, когда Thinking Sphinx будет поддерживать новые функции), но не уверен, когда это произойдет (я бы хотел сказать в ближайшее время, но ничего не могу обещать).

Существует обходной путь , хотя ... но имейте в виду, что вы обрабатываете массив строк, так что это дополнительный уровень сложности.

Что касается второго вопроса, я не могу понять, как выглядит база данных (запутанные имена, но сейчас мне не хватает фокуса), поэтому я просто пока оставлю это здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...