Вы можете разделить ваши два дела на разные шаблоны: один, если сообщения существуют, и один, если сообщений нет. В действии контроллера (MessagesController#index
, вероятно) добавьте в качестве последнего оператора:
render :action => 'index_empty' if @messages.blank?
Если сообщений нет, будет отображаться app/views/messages/index_empty.html.erb
. Если есть сообщения, они будут проваливаться и отображать app/views/messages/index.html.erb
как обычно.
Если вам это нужно более чем в одном действии, вы можете приятно преобразовать его в вспомогательный метод, подобный следующему (не проверено):
def render_action_or_empty (collection, options = {})
template = params[:template] || "#{params[:controller]}/#{params[:action]}"
template << '_empty' if collection.blank?
render options.reverse_merge { :template => template }
end
При этом вам просто нужно поставить render_action_or_empty(@var)
в конце любого действия контроллера, и он будет отображать либо шаблон 'action', либо шаблон 'action_empty', если ваша коллекция пуста. Также должно быть легко заставить эту работу работать с частями вместо шаблонов действий.