Tôi cần tên tệp duy nhất cho tệp của mình.Tạo tên tệp duy nhất
def filename
"#{SecureRandom.urlsafe_base64}.gif"
end
Điều này tiết kiệm một tập tin như thế này:
ylGP48WxZXOY2OQ_x9dxAA.gif
tuy nhiên lĩnh vực tương ứng của nó trong cơ sở dữ liệu được lưu như thế này:
jED48PRNz0asZzwYQXzecw.gif
Tôi nghĩ rằng những gì xảy ra là Carrierwave là gọi hàm file_name
khi nó đang ghi tệp và khi lưu tệp trong cơ sở dữ liệu, kết quả là url urlsafe_base64 được gọi hai lần và tạo hai chuỗi khác nhau . Nó hoạt động hoàn hảo khi tôi đã hardcoded một tên như là một thử nghiệm.
Vậy làm cách nào để ngăn điều này? Tôi biết nó rất khó để hỏi, nhưng làm thế nào tôi có thể làm cho Carrierwave sử dụng cùng một tên tập tin được tạo ngẫu nhiên trong cơ sở dữ liệu và khi viết tệp? Tôi nghiêm túc nghĩ rằng điều này nên được coi là một lỗi.
khi bạn chỉ muốn một tên tập tin độc đáo, tại sao bạn không thử để xem xét 'YYYYMMddHHmmss.gif' như tên tập tin của bạn ..? –
Chắc chắn là một tùy chọn. Tôi chỉ muốn carrierwave sẽ không liên tục bước trên ngón chân của tôi ... nó tốt nhưng nó có thể tốt hơn rất nhiều. – user3067865