2011-05-17 17 views
14

Üç modelim var (User, Tag, Product) ve bunlar s.t. User, birçok Tags ve Products sahiptir.Birden çok modeli olan Sunspot (Raylarda)

Arama amaçları için, kullanıcı adlarında, etiket adlarında ve ürün açıklamalarında (tek arama çubuğunda) arama yapabilmek istiyorum. Ürün sayfalarında da arama yapmak isterdim, ancak bu yalnızca etiket adları ve ürün açıklamaları ile alakalı.

Arama: "Linus Torvalds" yüksek konuyor kullanıcı adının herhangi örnekleriyle üç modeli Linus Torvalds tüm örneklerini verir

İşte iki örneğidir.

Ara: "Linux" yaşla birlikte: "20-25", "Linux" i içeren Ürünlere sahip kullanıcıların tüm örneklerini kendi adlarına/açıklamalarına ekleyerek ve bu yaş aralığına dahil olan Kullanıcıları ve " Linux "ve o yaş aralığındaki ürünler var. Arama çağını içermediyse, o zaman "Linux" parçasının kimseye değil, herkese uygun olacağını varsayın.

Sorum şu: Bunu yapmanın en iyi yolu ne olurdu? Kendi kontrol cihazıyla bir arama modeli oluşturmalı mıyım? Bunu görmezden gelmem ve paylaşılan klasörde bir arama kısmi eklemem gerekir mi? Başka hangi yöntemler var?

Çok teşekkürler.

+0

Eğer arama için yeni motorlu taşıt oluştururken sonunda mı? –

cevap

23

Karmaşık bir durumla karşılaşırsanız Arama nesnesini kullanmayı severim.

Ama Sunspot kullanarak nesneleri arasında arama yapmak:

@sunspot_search = Sunspot.search User, Tag, Product do |query| 
    query.keywords @search_query 
    query.with(:age).greater_than 20 
    query.with(:age).less_than 25 
    query.paginate(:page => params[:page], :per_page => 30) 
end 
+0

Bu durumda @sunspot_search örnek değişken üzerinde yineleme nasıl yapılır? Hangi sonucun Kullanıcı, Etiket veya Ürün olduğunu nasıl belirleyebilirim? – scaryguy

+0

@scaryguy http://blog.obiefernandez.com/content/2012/01/rendering-collections-of-heterogeneous-objects-in-rails-32.html –

İlgili konular