1

У меня есть высокоуровневый вопрос о Sphinx на Ruby On Rails:Sphinx и друг поиска

, я хочу, чтобы искать являются статьи, написанные моими друзьями. Структура модели будет:

User has_many users :through relationships 
Article belongs_to User 

Мой вопрос: какой синтаксис я использовал бы на Сфинкса, так пользователь ищет статей и получает только статьи, написанные его друзьями? У меня возникли проблемы с поиском этого онлайн, и я хотел бы иметь представление о том, как это будет работать, прежде чем я приложу свое решение.

ПРИМЕЧАНИЕ. Я подозреваю, что одно решение должно иметь массив идентификаторов друзей, а затем использовать условие: with => {: id => array_of_friendIDs}. Но, может быть, есть более эффективный способ сделать это?

ответ

1

Вы в основном правы - вам нужно собрать массив идентификаторов друзей и передать их поиску, используя опцию :with. Однако, как вы получаете этот список, особенно не связано с Sphinx.

friend_ids = current_user.users.pluck(:id) 

@articles = Article.search(params['search_term'], :with => {:user_id => friend_ids}) 

Использование .pluck сэкономит вам хороший немного времени, которые могли бы быть направлены на инстанцировании кучу объектов пользователя - вам нужно только их идентификаторы. Убедитесь, что вы установили user_id в качестве атрибута для Sphinx (используя has user_id в блоке define_index).

+0

Большое спасибо за это MrTheWalrus – Laurent