2010-04-29 31 views
7

Trên đơn đăng ký của tôi, tôi có một vài thứ có đính kèm trên chúng, sử dụng paperclip.đường ray + kẹp giấy: Có phải mô hình "Tệp đính kèm" chung là một ý tưởng hay không?

  • Khách hàng có một biểu tượng.
  • Cửa hàng có thể có một hoặc nhiều hình ảnh. Những hình ảnh này, ngoài ra, có thể có các thông tin khác chẳng hạn như ngày chúng được chụp.
  • Sản phẩm có thể có một hoặc nhiều hình ảnh của chúng, được phân loại (từ phông chữ, từ trở lại, v.v ...).

Còn bây giờ, mỗi một trong những mô hình của tôi có riêng của mình "kẹp giấy-lĩnh vực" (Client has_attached_file) hoặc mô hình has_many đó có đính kèm file (StorePictures cửa hàng has_many, ProductPictures has_many sản phẩm)

Khách hàng của tôi cũng có nói với tôi rằng trong tương lai chúng tôi có thể thêm nhiều tệp đính kèm hơn vào hệ thống (ví dụ: tài liệu pdf để khách hàng tải xuống).

Ứng dụng của tôi có hệ thống ủy quyền khá phức tạp được triển khai với declarative_authorization. Ví dụ: người ta không thể tải xuống hình ảnh từ sản phẩm mà anh ấy không được phép 'xem'.

Tôi đang cân nhắc việc tính lại mã của mình để tôi có thể có mô hình "Tệp đính kèm" chung. Vì vậy, bất kỳ mô hình có thể has_many :attachments.

Với ngữ cảnh này, nó có âm thanh như một ý tưởng hay không? Hay tôi nên tiếp tục làm Foos và FooPictures?

Trả lời

5

Tôi đã tìm thấy thường có các trường hợp trong đó một lớp Đính kèm chung dễ quản lý hơn nhiều so với các tệp đính kèm độc lập trên các loại bản ghi khác nhau. Cách duy nhất ở phía dưới của phương pháp đính kèm đơn giản là các hình thu nhỏ cần được tạo ra được định nghĩa cho tất cả các tệp đính kèm có thể cùng một lúc thay vì trên cơ sở từng trường hợp cụ thể. Một phương pháp lai cho phép linh hoạt hơn là tạo bảng Đính kèm dựa trên STI bằng cách bao gồm cột 'loại' và tạo các lớp con cụ thể sử dụng như ProductAttachment xác định các kiểu cụ thể.

+0

Cảm ơn câu trả lời của bạn. Cuối cùng tôi đã kết thúc không tái cấu trúc, bởi vì các lĩnh vực phụ cần thiết ở một số nơi. Làm STI sẽ giúp đỡ ở đó, nhưng công việc liên quan chỉ là không đáng. – kikito

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