Rails' flash'消息系统非常有用,但我总是发现其实现的细节使其使用变得尴尬。
具体而言,在响应结束时清除闪存消息。这意味着您必须确定它们是否将用于直接页面呈现或重定向,然后通过使用' now'来通知闪存系统。如果它不是重定向。
这似乎过于复杂且容易出错。
偶尔我会发现自己正在构建需要表现出闪存行为的东西,而我使用的过程略有不同:
class FlashlikeStore
attr_accessor :session
def initialize(session)
session[:flashlike] ||= []
self.session = session
end
def add(name, data)
self.store << { name: name, data: data }
end
def read
session.delete(:flashlike).to_json
end
def any?
store && store.any?
end
protected
def store
session[:flashlike]
end
end
在应用程序助手中有一点语法糖,我可以轻松地添加我的名称 - 值对,并且读取它的行为会删除数据。 (在这种情况下,我实际上是通过AJAJ阅读此内容,但这里并不重要。)
结果是消息只被读过一次,没有必要预先确定或猜测它们何时出现。他们在需要时会阅读,然后就会消失。
我想,有人可能会争辩说,对某个对象的调用既不应该读取数据也不应该改变状态,所以“读”&#39;方法可以分为“阅读”和“阅读”。并且&#39;擦拭&#39;如果你想那样纯粹的话。 (虽然你可能不会使用Rails。)
所以问题是:我错过了什么吗? Rails Flash消息的工作原理是否有令人信服的理由,因为它需要现在的“快速消息”。方法