Suppose I have a partial _flash.html.erb for rendering the flash in a consistent way. The natural thing to do would be to assume I can call ActionView::Base#flash from within this partial to retrieve the flash, and render the partial with render partial: "flash". But in fact, this doesn't work. Even though I haven't passed object: flash or locals: {flash: flash} in the call to render partial, PartialRenderer oh-so-helpfully defines a flash local variable, whose value is nil, shadowing ActionView::Base#flash. My alternatives are to rename the partial or pass a value for the flash local explicitly using one of those more verbose call to render.
I suggest that if no object option or local with the same name as the partial was passed to the render call, that PartialRenderernot define a local variable of the same name as the partial. This would change the behavior for anyone who is relying on the current behavior to get a nil value for the local when they don't pass an explicit value, but that seems like an unlikely case and easily fixed by passing nil explicitly, and it would be much more useful to do things like call ActionView::Base#flash from within a _flash.html.erb partial.
I'm happy to create a pull request if others agree.
The text was updated successfully, but these errors were encountered:
From this stack overflow question.
Suppose I have a partial
_flash.html.erbfor rendering the flash in a consistent way. The natural thing to do would be to assume I can callActionView::Base#flashfrom within this partial to retrieve the flash, and render the partial withrender partial: "flash". But in fact, this doesn't work. Even though I haven't passedobject: flashorlocals: {flash: flash}in the call torender partial,PartialRendereroh-so-helpfully defines aflashlocal variable, whose value is nil, shadowingActionView::Base#flash. My alternatives are to rename the partial or pass a value for the flash local explicitly using one of those more verbose call torender.I suggest that if no
objectoption or local with the same name as the partial was passed to therendercall, thatPartialRenderernot define a local variable of the same name as the partial. This would change the behavior for anyone who is relying on the current behavior to get anilvalue for the local when they don't pass an explicit value, but that seems like an unlikely case and easily fixed by passingnilexplicitly, and it would be much more useful to do things like callActionView::Base#flashfrom within a_flash.html.erbpartial.I'm happy to create a pull request if others agree.
The text was updated successfully, but these errors were encountered: