+1  A: 

You could create a helper method to render out partials based on the value passed back in the flash message.

Mike Buckbee
This almost feels like too much separation. Also where do you manage which object or path should be linked to without relying on global-like instance variables within the partials?
Ryan McGeary
+4  A: 

Glenn Gillen has an approach that he calls Useful Flash Messages in Rails.

I modified his code snippets to be a little more idiomatic (for me at least).

The controller fills the flash like this:

flash[:notice]      = "Your profile was updated. %s"
flash[:notice_item] = ["Edit again?", edit_profile_path(@profile)]

You then might have helpers that look something like this:

def render_flash_messages(*keys)
  messages = keys.collect do |key|
    content_tag(:p, flash_message_with_item(key), :class => "flash #{key}") if flash[key]
  end.join
  content_tag(:div, messages, :id => "flash_messages") unless messages.blank?
end

def flash_message_with_item(key)
  item = flash["#{key}_item".to_sym]
  substitution = item.is_a?(Array) ? link_to(*item) : item
  flash[key] % substitution
end

The view looks simply like this:

<%= render_flash_messages(:error, :notice, :warning) %>

The view (via the flash_message_with_item helper) is responsible for creating the anchor tag, but the controller manages what goes into the flash message including an optional resource for further action.

Ryan McGeary
I was hoping for some more savvy suggestions, but I'll go with this approach for now.
Ryan McGeary