在asp.net中有一些名为Request.Items的东西,我可以添加一个对象,然后我可以检查一个对象是否存在于我的代码的另一部分的.Items集合中(就像在另一个类中一样) )。
Rails有这样的东西吗?
答案 0 :(得分:2)
最受欢迎的选项之一是使用request_store
gem,它允许您从代码的任何部分访问全局商店。它使用Thread.current
来存储您的数据,并在每次请求后负责清理数据。
RequestStore[:items] = []
请注意,因为它使用Thread.current
,所以在每个请求有多个线程的多线程环境中它无法正常工作。
为了解决这个问题,我实现了一个可以在线程之间共享同一请求的商店。它被称为request_store_rails
,用法非常相似:
RequestLocals[:items] = []
答案 1 :(得分:0)
您可以定义一个类方法(在您想要的任何类中)来存储您的数据:
class Xyzzy
def self.items
@items ||= {}
end
end
# ....
if Xyzzy.items.include? :fubar
Xyzzy.items[:asd] = 1
end
但您应该决定何时清除此“缓存”。如果您只想要一个请求,请定义一个调用Xyzzy.items.clear
类对象是全局的。您也可以使用标准的全局变量,但这样不那么优雅。 :)