2016-08-17 4 views
0

Ich habe eine Rails 5 App und ich versuche, eine Aggregationen Suche nach einer has_and_belongs_to_many Assoziation zu tun. HierSearchkick Aggregationen für has_and_belongs_to_many

ist der Code, den ich bisher:

event.rb:

class Event < ApplicationRecord 
    searchkick text_start: [:title] 

    has_and_belongs_to_many :services 
    has_and_belongs_to_many :sectors 

    def search_data 
    atributes.merge(
     title: title, 
     description: description, 
     sector_name: sectors.map(&:name), 
     service_name: services.map(&:name) 
    ) 
    end 

end 

events_controller.rb:

def index 
    query = params[:j].presence || "*" 
    conditions = {} 
    conditions[:sector] = params[:sector] if params[:sector].present? 
    conditions[:service] = params[:service] if params[:service].present? 
    conditions[:date] = params[:date] if params[:date].present? 
    @events = Event.search query, where: conditions, aggs: [:sector, :service, :date], order: {created_at: {order: "desc"}}, page: params[:page], per_page: 10 
end 

Wenn ich Event.reindex in der Konsole nenne ich erwartete um zu zeigen, dass die Sektoren und Dienstleistungen indexiert wurden, aber es funktioniert nicht.

Um ehrlich zu sein, ich bin ziemlich verloren und gehe im Kreis, so dass jede Hilfe sehr geschätzt würde.

+0

Können Sie dieses Problem zu lösen? Ich versuche das Gleiche zu tun (mit Hilfe von Habtm-Assoziationen als Aggregationen), aber ich bin völlig verloren. –

+0

Ja, habe ich getan. Ich habe den Code hinzugefügt, der für mich als Antwort funktioniert hat. Hoffe es hilft dir – BillyBib

Antwort

2

Dies ist der Code, der für mich am Ende arbeiten:

event.rb:

def index 
    query = params[:j].presence || "*" 
    conditions = {start_date: {"gte": "now/d"}} 
    conditions[:sector_name] = params[:sector_name] if params[:sector_name].present? 
    conditions[:service_name] = params[:service_name] if params[:service_name].present? 
    conditions[:start_date] = params[:start_date] if params[:start_date].present? 
    @events = Event.search query, where: conditions, aggs: [:sector_name, :service_name], order: {start_date: {order: "asc", unmapped_type: "long"}}, page: params[:page], per_page: 10 
end 

events_controller.rb:

def search_data 
    { 
    title: title, 
    location: location, 
    description: description, 
    start_date: start_date, 
    sector_name: sectors.map(&:name), 
    service_name: services.map(&:name) 
    } 
end 
Verwandte Themen