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
как контраст в конце абзаца.