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.