Rails Flash не ведет себя так, как говорит Rails Guide

Согласно официальному разделу Flash на Rails Guide:

Вспышка

Флэш - это особая часть сеанса, которая очищается при каждом запросе. Это означает, что сохраненные там значения будут доступны только в следующем запросе, что полезно для передачи сообщений об ошибках и т. Д.

...

flash.now

По умолчанию добавление значений во флэш-память сделает их доступными для следующего запроса, но иногда вы можете захотеть получить доступ к этим значениям в том же запросе.

Однако после некоторого теста я обнаружил, что flash доступно в текущем и следующем запросе. А также flash.now доступно только в текущем запросе.

Руководство по Rails неверно? Или может я что-то пропустил?

# Controller action
def test_flash
  flash[:notice] = "This is a flash msg."
end

# test_flash.html.erb
<% flash.each do |name, msg| -%>
  <%= content_tag :div, msg, class: name %>
<% end -%>

2 ответа

Решение

Я не скажу, что документ неправильный, но я согласен, что он может быть более ясным. Следует сформулировать что-то вроде:

Flash очищается после следующего запроса, поэтому он доступен в текущем запросе и следующем запросе. Если вы хотите, чтобы он был доступен только в текущем запросе, а не в следующем запросе, используйте flash.now,

С другой стороны, не думаете ли вы, что что-то недоступно в текущем запросе, учитывая текущий Flash API, как объект, похожий на хэш, это было бы довольно странно? Например:

flash[:notice] = 'nnf'
puts flash[:notice] # => nil

Было бы больше смысла с write а также read если это так.

Вы прочитали это неправильно. flash.now доступно только для текущего запроса. flash (без сейчас) - единственный, который будет доступен для следующего запроса.

Предложение, которое вы прочитали выше - на самом деле говорит о простой flash (для начала), и только потом вводит flash.now как контраст в конце абзаца.

Другие вопросы по тегам