首先,我们为不同类型的“媒体”提供了这个命名空间/标准结构
Media< Ar::Base
Media::Local < Media
Media::Local::Image < Media::Local
Media::Local::Csv < Media::Local
等等……等等……
这非常好,因为用户可以拥有许多媒体,并且我们如何显示每个媒体是基于类名和一个共同响应的部分。
但是,如果我们有一些需要安全的 Csv 怎么办?也就是说,他们不能居住在公共场所。我真的很讨厌再次分支 Media 并执行以下操作的想法:
Media::Secure < Media
Media::Secure::Image < Media::Secure
Media::NotSecure < Media
Media::NotSecure::Image < Media::NotSecure
... Secure 和 NotSecure 会将不同的参数传递给 has_attached_file。
现在有两个代表 Image 的类,它使我的视图/助手系统更加复杂——更不用说它感觉很迟钝。
我真正想做的是能够更改某些 Paperclip::Attachment 对象在保存之前保存的位置(例如,通过 foo_secure_action 上传的任何内容)——但我似乎无法完成这项工作。Paperclip::Attachment 有一个带有 :path 和 :url 的 @options 哈希,但在保存之前更改它们不会影响它实际设置的位置。即使这是可能的,我不确定它是否会产生进一步的后果......
我对构建这些数据的替代想法持开放态度,但目前我喜欢在这种情况下使用 STI 的想法。