2011-05-17 21 views
14

我有三種型號(UserTagProduct),他們互動s.t. User有許多TagsProducts與多個型號的太陽黑子(在Rails中)

爲了便於搜索,我希望能夠搜索(使用一個搜索欄)用戶名,標籤名稱和產品說明。我還想在產品頁面上進行搜索,但這隻與標籤名稱和產品說明相關。

這裏有兩個例子:

搜索:「Linus Torvalds的」返回三種模式與用戶名的任何實例Linus Torvalds在所有情況下被置於較高。

搜索:年齡爲「20-25」的「Linux」返回包含名稱/描述中包含「Linux」並且屬於該年齡段的產品的所有用戶實例,以及包含「 Linux「並且擁有屬於該年齡段的產品。請注意,如果搜索沒有包含年齡,那麼它將默認所有適合「Linux」部分的人,而不是沒有。

我的問題是這樣做的最好方法是什麼?我應該用自己的控制器創建一個搜索模型嗎?我應該忽略這一點,並在共享文件夾中包含搜索部分?還有什麼其他方法?

非常感謝。

+0

你最終會爲你搜索創造新的MVCS? – 2011-11-12 23:46:42

回答

23

我喜歡搜索對象的想法,如果你正在做任何複雜的條件。

但是用太陽黑子中所有物體進行搜索:

@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

如何在這種情況下對@sunspot_search實例變量進行迭代?如何確定用戶或標籤或產品的結果? – scaryguy 2013-09-17 20:48:23

+0

@scaryguy http://blog.obiefernandez.com/content/2012/01/rendering-collections-of-heterogeneous-objects-in-rails-32.html – 2013-09-17 23:51:07