开发者

How do I perform a search in Rails3?

I'm aware that I can search queries by calling where() on a model as follows: Post.where(:title => 'My First Post')

However, what if I don't know if the user wants to filter out the search parameters? For example, I have a search form that has an optional title field. If the title i开发者_运维问答s filled, the form should search for a title. If it is not, however, the form should just return all fields.

I tried doing something along the lines of

search = Post.all
if params[:title].present?
   search.where(:title => params[:title])
end

However, Rails immidiately returns the result of the search when I call Post.all and I cannot further add conditions/

How do I do this?

Thanks!


.all is a 'finisher' method for arel and causes the query to actually be called (same goes for .each and .first). So, if you want to be able to keep building up the scope conditionally, .all should be the last thing called, if you want to call it at all.


Given that there really isn't much in the way of relations to chain here, it would seem that a simple one-liner with a ternary operator might do:

@posts = params[:title].present? ? Post.where(:title => params[:title]) : Post.all

... because when there is no :where clause scope, you couldn't later chain it to :all, anyway.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜