2012-11-09 69 views
2

我使用搜索多個colums 3

@countrysearch = Recipe.where(:dish_name => params[:search]).all 

所以,當我搜索了菜說,千層麪,我得到一個結果的搜索表單,我可以在我的食譜模型搜索一列,不過,我想喜歡能夠在配方模型,country_of_origin,難度和preperation_time內搜索另外3列。

我已經試過這

@countrysearch = Recipe.where({:dish_name => params[:search], :country_of_origin => params[:search], :difficulty => params[:search], :preperation_time => params[:search]}).all 

但是這似乎並沒有工作,要麼

任何人都可以給您一個建議?

回答

3

代碼使用AND但你要OR我想:

@countrysearch = Recipe.where("dish_name = ? OR country_of_origin = ? OR difficulty = ? OR preperation_time = ?", 
    params[:search], 
    params[:search], 
    params[:search], 
    params[:search] 
) 

如果你不想使用SQL字符串可以使用arel_table

at    = Recipe.arel_table 
search   = params[:search] 
@countrysearch = Recipe.where(at[:dish_name].eq(search).or(at[:country_of_origin].eq(search)).or(at[:difficulty].eq(search)).or(at[:preperation_time].eq(search))) 

但當前Rails的版本我會優先考慮第一種方法,因爲這是更好的可讀性。在Rails 5中,您將有更好的方法來處理這類查詢。 (我會更新這個帖子,如果這變得可用。)

+0

啊所以它的確,現在你明確指出了。非常感謝,現在得到結果:) – Richlewis

+0

如果你想要在大型數據庫中搜索很多項目,你可能應該考慮使用http://railscasts.com/episodes/120-thinking-sphinx或其他搜索發動機。 – tbraun89

+0

是的,這可能是我做的事情,如果應用程序變得更大,但現在它相對較小,所以現在保持簡單,謝謝你的建議,雖然 – Richlewis