0

Rails と Mongoid で Select2 を使用しており、サーバー側で Sunspot Solr を使用して検索を行っています。私がしようとしているのは、mongo からのデータを solr でフィルタリングし、そのデータを ajax リクエストで取得し、親子階層に従って結果をグループ化することです。私が理解できないのは、子を検索するときであり、子の結果が複数ある場合、親カテゴリが複数回発生しています。詳細については、以下をお読みください。

これがMongo DBの私のデータです

{ "_id" : ObjectId("5209eb465a721ae827c661de"), "title" : "Bina Kanalizasyon Tesisatı", "parent" : "Su Tesisatçılığı", "path" : "sutesitati/kanalizasyon" }

{ "_id" : ObjectId("5209eb465a721ae827c661df"), "title" : "Daire Temiz Su Tesisatı", "parent" : "Su Tesisatçılığı", "path" : "sutesisati/temizsu" }

{ "_id" : ObjectId("5209eb465a721ae827c661e0"), "title" : "Musluk Tamiri", "parent" : "Su Tesisatçılığı", "path" : "sutesitati/musluktamiri" }

これが私のRailsモデルです

class Category
  include Mongoid::Document
  include Sunspot::Mongoid2

  searchable do
    text :title 
  end

  field :title, :as => :title_textp
  field :parent
  field :path  
end

これが私のRailsコントローラーです

class CategoriesController < ApplicationController
  respond_to :html, :json

  def list_styles 
      search = Category.search do
        fulltext params[:q]
      end
      search = Category.search { keywords params[:q]; paginate :page => params[:page], :per_page => params[:page_limit] }
      @results = search.results
      @total_lines = search.total
      @categories = @results    
     respond_with @categories 
  end 

end

これが私のHamlビューです

 = f.label :category
 = f.hidden_field :category, class: 'input-block', placeholder: "Lütfen almak istediğiniz hizmet türünü seçiniz"

そして、これが私が理解しようとしている私のJavascriptです

$('#itinerary_category').select2({
    minimumInputLength: 3,
     ajax: {
      url: "/categories/list_styles",
      dataType: 'json',
      quietMillis: 100,
      data: function (term, page) { 
        return {
            q: term, 
            page_limit: 10, 
            page: page, 
        };
      },
    results: function (data) {
      var results = [];
      $.each(data, function(index, item){
        results.push({
          text: item.parent,
          children: [{id: item._id, text:item.title}]
        });
      });
      return {
          results: results
      };
    } 
    }
}); 

サーバーを実行して検索を行うと、1つのアイテムを持つグループで問題なく動作します

1つのアイテムを検索

ただし、複数の項目を表示する検索を行うと、グループ名 ("Su Tesisatı") も 2 回表示されます。

グループが 2 回表示されました

グループ名を 2 回表示したくありません。変更方法がわかりません。のようなリストが欲しい

Su Tesisatçılığı
  Daire Temiz Su Tesisatı
  Bina Kanalizasyon Tesisatı

私はjsが苦手で、それを解決する方法がわかりませんでした。誰でも私を助けてもらえますか?私が提供した例は、select2 でのリモート データのグループ化に関する議論にもつながり、select2 を rails+mongoid+solr+ajax で使用する方法を明確に述べていると思います。誰かがこれをクリアできれば、これにより select2 がより強力になります。Web 上には、ajax リモート データとのグループ化で動作させるための明確な例がほとんどないためです。どんな助けでも大歓迎です。

4

1 に答える 1