Rails全局变量在控制器操作中变为零

时间:2013-12-18 12:10:34

标签: ruby-on-rails ruby global-variables

在我的控制器的索引操作中,我设置了image = AppImage.new(:path => (Rails.root.to_s + "/highlands_girl.jpg"))。然后我设置$image = image

然后我有其他控制器动作,我再次调用这个全局变量,有时它是零并且图像没有显示,但有时它会显示。我可以从我的日志文件中的调试打印中看出,对全局变量的所有调用都是在设置之后,所以$image=image在我再次调用image并发现它为零之前发生。特别是,我有一个视图调用五次的缩略图操作。在某些负载上,所有五个调用都会产生一个图像,而在某些情况下,没有一个调用。

如果它很重要,当我在Heroku上托管时,这不是问题,但是自从我将它移到AWS后就出现了这个问题。如果可能的话,我想避免将其写入数据库,这就是为什么我使用new而不是create。

1 个答案:

答案 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