2016-10-06 8 views
1

У меня есть модель User, в которой много Skills, хотя его Masteries.Algolia_search на вложенной модели

Я использую форму для извлечения пользователей с помощью Algoliasearch, и я хотел бы получить всех пользователей, обладающих определенным навыком (IE, если бы я получил имя пользователя «John», у которого есть навык «Оригами» , он должен появиться в результатах, если я типа «Джон» или «Оригами»)

Я пытался сделать это путем сопоставления вложенных навыков, но это не похоже на работу

Вот модель

class Creator < ActiveRecord::Base 
include AlgoliaSearch 


algoliasearch do 
    # all attributes will be sent 
    add_attribute :creator_skills 
end 

has_many :masteries 
has_many :skills, through: :masteries 

def creator_skills 
    self.masteries.map do |s| 
    { name: s.skill.name } 
    end 
end 

[...] 

Форма возвращает параметр query, который используется для retri создатели eve с

@creators = Creator.where(display_index: true).algolia_search(params[:query]).shuffle 

Я что-то пропустил? Возможно ли сопоставить вложенную модель?

+0

документация объясняет, как добиться того, чтобы: https://github.com/algolia/algoliasearch-rails#nested-objectsrelations – MrYoshiji

+0

@MrYoshiji Я пытался, кажется, что это не работает с отношениями '' 'has_many_though''' –

+0

Это сообщение может помочь https://github.com/algolia/algoliasearch-rails/issues/31 – MrYoshiji

ответ

2

Вы не сможете комбинировать как .where статьи, так и метод algolia_search. Кроме того, вы должны использовать функцию огранки для фильтрации навыков. Это может выглядеть следующим образом:

class Creator < ActiveRecord::Base 
    include AlgoliaSearch 

    algoliasearch do 
    add_attribute :creator_skills 

    attributesForFaceting ['creator_skills', 'display_index'] 
    end 

    has_many :masteries 
    has_many :skills, through: :masteries 

    def creator_skills 
    # array of skill names 
    self.skills.map(&:name) 
    end 

    [...] 

end 

# empty query (= match all) + facet filters 
Creator.algolia_search('', filters: 'creator_skills:Origami AND display_index:true') 
Смежные вопросы