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 is 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!
.allis a ‘finisher’ method for arel and causes the query to actually be called (same goes for.eachand.first). So, if you want to be able to keep building up the scope conditionally,.allshould be the last thing called, if you want to call it at all.