2011-12-28 31 views
6

Làm cách nào để đổi tên hình ảnh hiện có bằng CarrierWave? (Câu hỏi này gần nhưng không thực sự giống nhau: Renaming uploaded files with Carrierwave) Ví dụ: nếu model.image.urlfoo-bar-jpg làm cách nào để đổi tên cả tệp và trường cơ sở dữ liệu tương ứng thành foo-bar.jpg?Đổi tên các tệp CarrierWave hiện có

model.image.recreate_versions! sẽ tạo tệp mới nhưng trong cơ sở dữ liệu, nó không thay đổi trường hình ảnh của mô hình.

Trả lời

1

tôi đã sử dụng các kỹ thuật được mô tả ở đây: How to assign a remote file to Carrierwave?

Điều này có thể không phải là cách tốt nhất để đi, Nhưng nó làm việc cho tôi. Tệp từ xa của tôi đã xảy ra là tên/đường dẫn tệp cũ.

Trước tiên, tôi đã thay đổi người tải lên Carrierwave để có kiểu tên tệp mới mà tôi muốn. Sau đó, tôi đã viết một nhiệm vụ cào để lặp qua các hồ sơ và cập nhật các tập tin như thế này:

model.remote_image_url = old_image_url 
model.save! 

này sẽ tải lên các tập tin hiện một lần nữa, thiết lập tên/path dựa trên Uploader cập nhật của bạn (và lí tất cả các phiên bản). Tôi đã không giải quyết vấn đề làm sạch các tập tin cũ được nêu ra, tôi không chắc chắn làm thế nào điều này sẽ làm việc nếu store_dir của bạn là như nhau (tôi thay đổi là tốt).

Đảm bảo kiểm tra kỹ lưỡng trên một vài bản ghi trước khi chạy qua toàn bộ bảng, thật dễ dàng để tạo ra nhiều thứ. Lưu ý rằng việc thay đổi store_dir của bạn sẽ phá vỡ tất cả các tra cứu của bạn cho các tệp hiện có.

2

locomotive branch của Carrierwave dường như đã đổi tên hỗ trợ - tệp cụ thể là here.

file rename support trong chính khi bạn chuyển đổi định dạng tập tin, nhưng không hỗ trợ đổi tên:

"This should help with situations where a file has multiple versions, 
and at least one of the versions is of a different format than the master version." 
0

Tìm thấy điều này, có vẻ như đã lỗi thời, nhưng có thể giúp ai đó: https://github.com/stvkoch/carrierwave_single_store

Các vấn đề liên quan