Carrierware: เก็บไฟล์ไว้ในไดเรกทอรีตามวันที่สร้างไว้

ฉันใช้ 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 แบบ:

  1. สร้างไฟล์แยกต่างหากโดยที่ฉันจะจัดเก็บเส้นทางไฟล์จริงไปยังไฟล์เมื่อมีการสร้าง จากนั้นจะใช้ค่านี้เพื่อดึงข้อมูลไฟล์
  2. โอเวอร์โหลดเมธอด retrieve_from_store! (ซึ่งเป็นส่วนหนึ่งของ Carrierwave gem) และทำให้สร้างเส้นทางตามฟิลด์ created_at จากบันทึกไฟล์ แทนที่จะเป็นจาก store_dir .

ฉันโน้มน้าวความเป็นไปได้ครั้งที่สองเพราะมันไม่สกปรกขนาดนั้น แต่ทั้งคู่กลับรู้สึกว่า "ไม่ใช่ทางราง" อันไหนจะดีกว่าที่จะใช้และเพราะเหตุใด หรือบางทีผู้ให้บริการคลื่นอาจมีวิธีแก้ไขปัญหานี้


person Ruslan    schedule 12.12.2012    source แหล่งที่มา


คำตอบ (1)


เดาทั้งหมดที่นี่ แต่เมื่อดูเอกสาร ฉันคิดว่าสิ่งนี้น่าจะได้ผล:

def store_dir
    "uploads/#{model.created_at.year}/#{model.created_at.month}/#{model.created_at.day}"
end
person Jiří Pospíšil    schedule 12.12.2012