基于Ruby on Rails中的params动态创建查询搜索请求

时间:2012-09-04 03:21:56

标签: ruby-on-rails-3.2

以下是我对搜索页面的一些请求

/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

你的想法?

1 个答案:

答案 0 :(得分:1)

每次都不需要执行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?