我的文件需要唯一的文件名.
def filename "#{SecureRandom.urlsafe_base64}.gif" end
这样可以保存如下文件:
ylGP48WxZXOY2OQ_x9dxAA.gif
但是它在数据库中的相应字段要保存如下:
jED48PRNz0asZzwYQXzecw.gif
我认为发生的事情是Carrierwave在编写文件时调用file_name函数,当它将实例保存在数据库中时,导致urlsafe_base64被调用两次并创建两个不同的字符串.当我将名称硬编码为测试时,它的工作正常.
那怎么能阻止这个呢?我知道这是令人发指的,但是如何让Carrierwave在数据库中使用相同的随机生成的文件名并在编写文件时?我认真地认为这应该被视为一个错误.
解决方法
这是一个选择:
def filename random_string end protected def random_string @string ||= "#{SecureRandom.urlsafe_base64}.gif" end
我同意carrierwave可能更直观一些.