Rails: An elegant way to display a message when there are no elements in database
iterator, loops, ruby, ruby-on-rails
Solution
If you use the `:collection` parameter to render e.g. `render :partial => 'message', :collection => @messages` then the call to render will return `nil` if the collection is empty. This can then be incorporated into an || expression e.g.
<%= render(:partial => 'message', :collection => @messages) || 'You have no messages' %>
In case you haven't come across it before, render `:collection` renders a collection using the same partial for each element, making each element of `@messages` available through the local variable `message` as it builds up the complete response. You can also specify a divider to be rendered in between each element using `:spacer_template => "message_divider"`
Problem
I realized that I'm writing a lot of code similar to this one: ``` <% unless @messages.blank? %> <% @messages.each do |message| %> <%# code or partial to display the message %> <% end %> <% else %> You have no messages. <% end %> ``` Is there any construct in Ruby and/or Rails that would let me skip that first condition? So that would be executed when iterator/loop won't enter even once? For example: ``` <% @messages.each do |message| %> <%# code or partial to display the message %> <% and_if_it_was_blank %> You have no messages. <% end %> ```