这是我获取 UUID 的代码:
def manage_id
self.id = UUIDTools::UUID.random_create().to_s.upcase if self.id.blank?
end
这非常适合我的对象的主键。
我的问题是我想用 UUID 命名上传的文件......并且我为不同的上传获得相同的 UUID。例如,我将拥有一个 UUID,2 分钟后与另一个对象我将拥有相同的 UUID!
这是命名我的图像的类代码:
:filename => "#{UUIDTools::UUID.random_create().to_s.upcase}.jpg" }
我不明白生成 UUID 时会出现什么问题......
我在开发中没有问题!
编辑1:问题不在于UUID本身,它与时间戳相同......(并且仅在生产中)
编辑2:我发现了问题。那个设定:
config.cache_classes = true
是生产模式的问题。它肯定会将 UUID 保存在内存中的某个位置。
我想我不能在生产模式下切换到 false (为了性能),那么为这个插件名称功能停用缓存的最佳方法是什么?
编辑 3:我添加了我的模型的完整代码
class Product < ActiveRecord::Base
file_column :image, {:magick => { :versions => { "tiny" => "70x70", "small" => "160x240", "high" => "640x960" }}, :store_dir => "public/upload/wine/image", :web_root => "upload/", :filename => "#{UUIDTools::UUID.timestamp_create().to_s.upcase}.jpg" }
end
所以,正如我所说,生成的 UUID 在生产中被缓存。我不知道如何强制这个模型或者插件 file_column 不被缓存?