2011-01-25 6 views
26

Tôi có một mô hình bài đăng và một mô hình podcast. Cả hai mô hình đều có một thuộc tính có tiêu đề: image. Tôi đang sử dụng một trình tải lên Carrierwave (có tên ImageUploader) để xử lý cả hai mô hình. Tôi có hai câu hỏi trước khi tôi đi vào sản xuất.Carrierwave; nhiều người tải lên hoặc chỉ một người?

Dumb câu hỏi:

Is it ok để sử dụng người tải lên tương tự cho hai mô hình khác nhau khi cả hai đều có cùng tên thuộc tính tương tự cho attachements tập tin của họ? xin lỗi nếu nó có vẻ rõ ràng

câu hỏi chính:

Tôi muốn tạo ra ba phiên bản của mỗi bài đăng blog hình ảnh (ngón tay cái, lớn, nâu đỏ) và chỉ 1 phiên bản của mỗi hình ảnh podcast (ngón cái).

Tôi có cần sử dụng hai người tải lên ngay bây giờ hoặc tôi có thể đặt tên không gian tên với người mà tôi đã sử dụng không?

Một lần nữa, điều này có vẻ hiển nhiên. Tôi có thể đã viết trình tải lên thứ hai vào thời điểm đưa tôi đến các câu hỏi này

+0

đó là một câu hỏi rất hay – BKSpurgeon

Trả lời

39

Bạn có thể sử dụng cùng một trình tải lên trên các mô hình khác nhau ngay cả khi chúng có tên thuộc tính khác nhau. ví dụ.

class Post 
    mount_uploader :image, ImageUploader 
end 

class Podcast 
    mount_uploader :photo, ImageUploader 
end 

Có hay không bạn muốn là một vấn đề khác. Trong trường hợp của bạn, tôi sẽ tạo các trình tải lên khác nhau cho từng mô hình, vì chúng có các yêu cầu khác nhau. Bạn luôn có thể sử dụng các lớp con nếu bạn muốn giữ mã của mình khô:

class ImageUploader < Carrierwave::Uploader::Base; end # thumbnail 
class PostImageUploader < ImageUploader; end # thumbnail (from superclass), large & sepia 
class PodcastImageUploader < ImageUploader; end # thumbnail (from superclass) 
+1

cảm ơn, điều đó làm cho nó rõ ràng hơn rất nhiều đối với tôi – stephenmurdoch