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つのアイテムを持つグループで問題なく動作します
ただし、複数の項目を表示する検索を行うと、グループ名 ("Su Tesisatı") も 2 回表示されます。
グループ名を 2 回表示したくありません。変更方法がわかりません。のようなリストが欲しい
Su Tesisatçılığı
Daire Temiz Su Tesisatı
Bina Kanalizasyon Tesisatı
私はjsが苦手で、それを解決する方法がわかりませんでした。誰でも私を助けてもらえますか?私が提供した例は、select2 でのリモート データのグループ化に関する議論にもつながり、select2 を rails+mongoid+solr+ajax で使用する方法を明確に述べていると思います。誰かがこれをクリアできれば、これにより select2 がより強力になります。Web 上には、ajax リモート データとのグループ化で動作させるための明確な例がほとんどないためです。どんな助けでも大歓迎です。