В предыдущих версиях Rails (Rails 2) локальная переменная по умолчанию искала переменную экземпляра с тем же именем, что и частное в родительском.
Учитывая ваш пример, так как частичное имя имеет имя _flash
, оно автоматически передаст переменную экземпляра flash как локальную для частичного.Таким образом, у вас будет доступ к нему.Это поведение устарело в 2.3 и было удалено в Rails 3.0.
Это означает, что вам всегда нужно явно передавать все переменные экземпляра как locals
, даже flash
, как вы писали в своем последнем примере.
<%= render :partial => "flash", :locals => {:flash => flash} %>
Это не имеет ничего общего с flash
, скажем, flash
- переменная экземпляра, как и любая другая.