Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Flash Messages in Partials (Rails 3)

Tags:

I have a partial, _flash.html.haml

- flash.each do |type, value|   .flash{ :class => type.to_s }     = value  

Which I'm rendering from a view using

=render :partial => "flash"

Which complains that the flash hash is nil/undefined. However, when I do this:

=render :partial => "flash", :locals => {:flash => flash}

It works.

Why doesn't the partial have access to the flash message?

like image 652
Jamie Wong Avatar asked Jun 24 '10 16:06

Jamie Wong


People also ask

How do I use flash messaging?

To implement flash messages in NodeJs with connect-flash module, you need to install the required dependencies using the command. Express: Required by the library connect-flash to run. Express-session: to create a session whenever a message is flashed, so that the user can be redirected to a particular page.


2 Answers

In previous versions of Rails (Rails 2), the default local variable would look for an instance variable with the same name as the partial in the parent.

Given your example since the partial is named _flash it would automatically pass the instance variable flash as a local to the partial. Thus you would have access to it. This behavior was deprecated in 2.3 and has been removed in Rails 3.0.

This means that you always have to explicitly pass all instance variables as locals, even flash, just as you wrote in your latter example.

<%= render :partial => "flash", :locals => {:flash => flash} %>

This has nothing to do with flash per say, flash is a instance variable just as any other.

like image 81
maz Avatar answered Nov 07 '22 22:11

maz


Because your partial is named "_flash", you should have the :object local to specify variable flash inside the partial.

Change your partial name and you will be able to use flash inside, for example:

= render "show_flash_names" 
like image 25
tothemario Avatar answered Nov 07 '22 21:11

tothemario