ฉันใช้ Carrierwave เพื่อจัดการการอัปโหลดของฉัน ฉันได้ระบุ store_dir วิธีต่อไปนี้:
def store_dir
"uploads/#{Time.now.year}/#{Time.now.month}/#{Time.now.day}"
end
การอัปโหลดไฟล์ทำงานได้อย่างมีเสน่ห์ ทุกครั้งที่ฉันอัปโหลดไฟล์ ไฟล์จะไปจบลงที่ไดเร็กทอรีที่ควรสิ้นสุด เช่น "ไดเร็กทอรีของวันนี้"
เมื่อฉันพยายามดาวน์โหลดไฟล์ Carrierwave กำลังสร้างเส้นทางการดาวน์โหลดแบบไดนามิกตามตัวเลือก store_dir สมมติว่าไฟล์ที่อัปโหลดเมื่อ 1.12.2012 มีอยู่ในเส้นทางต่อไปนี้บน fliesystem:
/uploads/2012/12/01/file.ext
จะถูกดึงข้อมูลโดยผู้ให้บริการเวฟเป็น:
/uploads/2012/12/12/file.ext
ซึ่งนำไปสู่ข้อผิดพลาด "ไม่สามารถอ่านไฟล์" ได้อย่างชัดเจน
ฉันมาพร้อมกับวิธีแก้ปัญหาที่เป็นไปได้ 2 แบบ:
- สร้างไฟล์แยกต่างหากโดยที่ฉันจะจัดเก็บเส้นทางไฟล์จริงไปยังไฟล์เมื่อมีการสร้าง จากนั้นจะใช้ค่านี้เพื่อดึงข้อมูลไฟล์
- โอเวอร์โหลดเมธอด retrieve_from_store! (ซึ่งเป็นส่วนหนึ่งของ Carrierwave gem) และทำให้สร้างเส้นทางตามฟิลด์ created_at จากบันทึกไฟล์ แทนที่จะเป็นจาก store_dir .
ฉันโน้มน้าวความเป็นไปได้ครั้งที่สองเพราะมันไม่สกปรกขนาดนั้น แต่ทั้งคู่กลับรู้สึกว่า "ไม่ใช่ทางราง" อันไหนจะดีกว่าที่จะใช้และเพราะเหตุใด หรือบางทีผู้ให้บริการคลื่นอาจมีวิธีแก้ไขปัญหานี้