2012-09-04 52 views
2

基於PARAMS在Ruby中搜索請求下面是一些請求搜索頁面我有動態創建查詢on Rails的

/articles?tag=tag1&author=author1 
/articles?title=title1&tag=tag1 
/articles?title=title1&tag=tag1&author=author1 
/articles?tag=tag1 
/articles?title=title1&tag=tag1&author=author1&size=medium&is_deprecated=false&has_fotos=true 

那麼,什麼是要取決於Article模型的請求最有效的方法一個問題?我不喜歡做這樣的事

@articles = Article.all 
@articles = Article.find_by_tag(params[:tag]) if params[:tag] 
@articles = Article.where("title like ?", params[:title]) if params[:title] 
@articles = Article.find_by_author(params[:author]) if params[:author] 
@articles = Article.find_by_is_deprecated(params[:is_deprecated]) if params[:is_deprecated] 
#...etc 

你的想法?

+0

http://www.pixellatedvisions.com/2009/04/21/passing-a-hash-of-conditions-to-find-in-rails –

+0

這是寫在2009年,它已被棄用。 –

回答

2

無需每次都執行sql查詢......使用ruby方式。 您可以使用下面的方法..

@articles = Article.all 

@articles.select!{ |article| article.tag==params[:tag] } if params[:tag].present? 

@articles.select!{ |article| article.title==params[:title]} if params[:title].present? 

@articles.select!{ |article| article.author==params[:author]} if params[:author].present? 

@articles.select!{ |article| article.is_deprecated==params[:is_deprecated]} if params[:is_deprecated].present?