2012-07-23 32 views
1

我試圖在rails中公開一個搜索功能。我希望用戶能夠輸入字符串像name:"john" color:"blue"並獲得ActiveRecord對象名單對一些模型有一個包含john名稱屬性和包含blue顏色屬性。我也希望他們能夠使用andor和括號例如name:"john" or color:"blue"(name:"john" color:"blue") or name:"bill"。理想情況下,他們也可以使用諸如age<20之類的地方,其中年齡是數字字段。有沒有一個軌道插件可以做到這一點。我在獅身人面像簡要尋找深挖這兩者似乎爲此創造了一個API,但他們是否提供了明確的基於文本的選擇,目前還不清楚,或者如果我需要解析搜索字符串自己。如何使用戶可以搜索導軌模型?

回答

2

ErnieRansack寶石是開始的好地方。

你將不得不您提交的表單和洗劫代碼(這將是一個好主意,反正出於安全原因)將字符串從你渴望的東西洗劫可以理解的格式轉換之間提供了一箇中間層。

如果您檢查demo page和創業板的文檔,你會發現它很簡單,創建這種查詢你之後。

觀看GET請求是如何根據您構建的條件生成的,並在您的應用程序中替換Ernie在演示中使用單個文本字段接受字符串如(name:"john" color:"blue") or name:"bill"的構建器。提交此字段時進行一些模式匹配,並構建適當的查詢字符串以傳遞到Ransack gem。

編輯

對於喜歡 「什麼是對______流行的寶石?」,檢查出The Ruby Toolbox未來的問題。如果Ransack不適合您的需求,那麼Rails Search類別中的寶石可能就是您想要的。我個人使用Ransack爲,正好是你所描述的;爲我的應用程序的User模型提供自定義查詢界面。

0

我建議做自己的搜索類別。我發現,對於每個應用程序我做的,搜索的需求相當大的變化,它是很簡單的創建考慮在搜索查詢所有你可能需要的變量搜索應用程序,造成對任何數量的您要搜索類。

在你的搜索類,有它返回一個集合,在你想要的順序,並收集可以由該搜索者可能希望對象實例。