在控制器的索引操作中,我设置了image = AppImage.new(:path => (Rails.root.to_s + "/highlands_girl.jpg"))
. 然后我设置$image = image
.
然后,我有其他控制器操作,再次调用此全局变量,有时它是 nil 并且图像不显示,但有时确实如此。 我可以从日志文件中的调试打印中看出,对全局变量的所有调用都是在设置全局变量之后进行的,因此$image=image
在我再次调用image
并发现它是 nil 之前发生。 特别是,我有一个缩略图操作,视图调用了五次。 在某些加载中,所有五个调用都提供图像,而在某些加载中,没有一个。
如果这很重要,当我在 Heroku 上托管时,这不是问题,但是自从我将其移动到 AWS 以来,它就有了这个问题。 如果可能的话,我想避免将其写入数据库,这就是为什么我使用 new 而不是 create 的原因。
你永远不应该在rails中使用全局变量(坦率地说,在其他任何地方)——有更好的位置来存储数据。如果应用映像是模型,则只需将其 id 存储在会话中,并在应用程序控制器中写入资源库和 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