加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 生成唯一的文件名

发布时间:2020-12-17 04:16:54 所属栏目:百科 来源:网络整理
导读:我的文件需要唯一的文件名. def filename "#{SecureRandom.urlsafe_base64}.gif"end 这样可以保存如下文件: ylGP48WxZXOY2OQ_x9dxAA.gif 但是它在数据库中的相应字段要保存如下: jED48PRNz0asZzwYQXzecw.gif 我认为发生的事情是Carrierwave在编写文件时调
我的文件需要唯一的文件名.
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可能更直观一些.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读