Во-первых, у нас есть структура пространства имен / sti'd для наших различных типов 'Media'
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, и это делает мою систему view / helper намного более сложной - не говоря уже о том, что она кажется очень тупой.
То, что я действительно хотел бы сделать, это иметь возможность изменить место сохранения определенных объектов Paperclip :: Attachment до их сохранения (например, все, что было загружено с помощью foo_secure_action), - но я не могу этого сделать сделать эту работу. Paperclip :: Attachment имеет хэш @options с: path и: url, но изменение их перед сохранением не влияет на то, где они фактически установлены. Даже если это возможно, я не уверен, будет ли это иметь дальнейшие последствия ...
Я открыт для альтернативных идей для структурирования этих данных, но на данный момент мне нравится идея использовать STI для этой ситуации.