Generate unique filename

carrierwave, ruby-on-rails

Solution

This is one option:

  def filename
    random_string
  end   

  protected 

  def random_string
    @string ||= "#{SecureRandom.urlsafe_base64}.gif"
  end

I agree carrierwave could a be a tad more intuitive.

Problem

I need unique filenames for my files. ``` def filename "#{SecureRandom.urlsafe_base64}.gif" end ``` This saves a file such as this: ``` ylGP48WxZXOY2OQ_x9dxAA.gif ``` however its respective field in the database to be saved like this: ``` jED48PRNz0asZzwYQXzecw.gif ``` I think what's happening is that Carrierwave is calling the `file_name` function when it's writing the file and when its saving the instance in the database, resulting in urlsafe_base64 being called twice and creating two different strings. It works perfectly when I've hardcoded a name as a test. So how can stop this? I know it's outrageous to ask, but how can I make Carrierwave use the same randomly generated filename in the database and when writing the file? I seriously think this should be considered a bug.

Original source