在我的控制器的索引操作中,我设置了image = AppImage.new(:path => (Rails.root.to_s + "/highlands_girl.jpg"))
。然后我设置$image = image
。
然后我有其他控制器动作,我再次调用这个全局变量,有时它是零并且图像没有显示,但有时它会显示。我可以从我的日志文件中的调试打印中看出,对全局变量的所有调用都是在设置之后,所以$image=image
在我再次调用image
并发现它为零之前发生。特别是,我有一个视图调用五次的缩略图操作。在某些负载上,所有五个调用都会产生一个图像,而在某些情况下,没有一个调用。
如果它很重要,当我在Heroku上托管时,这不是问题,但是自从我将它移到AWS后就出现了这个问题。如果可能的话,我想避免将其写入数据库,这就是为什么我使用new而不是create。
答案 0 :(得分:1)
你永远不应该在rails中使用全局变量(坦白地说,在其他任何地方) - 有更好的存储数据的地方。如果您的应用程序映像是模型,则将其id存储在会话中并在应用程序控制器中编写setter和getter就足够了:
#ApplicationController
def image=(image)
session[:image_id] = (@image = image).try(:id)
end
def image
@image ||= AppImage.find(session[:image_id]])
end
如果它不是模型,它应该足以构成故事图像路径:
def image=(image)
session[:image_path] = (@image = image).try(:path)
end
def image
@image ||= AppImage.new(path: session[:image_path]])
end