【发布时间】:2012-01-10 00:00:06
【问题描述】:
我在 Rails 3 中遇到了一个问题,即闪存哈希似乎过早地返回了一个请求。也就是说,它似乎在渲染时返回了在同一个请求中设置的东西。例如,考虑一个控制器动作:
add_warning "Danger, will robinson."
在我的 ApplicationController 中,我有:
before_filter :set_errors
#...
def set_errors
flash[:errors] ||= []
flash[:warnings] ||= []
flash[:notices] ||= []
end
#...
def add_warning(msg)
flash[:warnings] << msg
end
而我的 application.html.erb 布局模板有
<% flash[:warnings].each do |msg| %>
<div class="warnings"><%= msg %></div>
<% end %>
根据我对 Rails 指南的理解,除非我使用 flash.now,否则不应在同一请求中呈现 flash 内容。而且,如果我有一个redirect_to,它们应该在第二个请求中呈现。但是当 redirect_to 发生时它们根本不会出现。
【问题讨论】:
-
我不确定你为什么要重新发明轮子。如果您按照应该使用的方式使用闪存(作为会话存储),那么它应该可以正常工作。 guides.rubyonrails.org/…
-
这正是我想要使用它的方式,除了我想要支持任意数量的多个错误消息。因为该示例只分配了一个字符串,所以它只支持一条错误消息。
标签: ruby-on-rails ruby