【发布时间】:2026-02-09 14:00:01
【问题描述】:
这是我获取 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 不被缓存?
【问题讨论】:
-
请添加完整的代码示例
-
我添加了完整的代码。谢谢。
-
老实说,我在这个插件中找不到关于 :filename 选项的声明。你用这个github.com/tekin/file_column吗?
-
对不起,我在这里添加了选项文件名:railspro.blogspot.fr/2010/12/…
标签: ruby-on-rails uuid