0

まず、さまざまなタイプの「メディア」に対して、この名前空間/固定化された構造があります。

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 を表す 2 つのクラスがあり、ビュー/ヘルパー システムが非常に複雑になっています。

私が本当にやりたいことは、特定の Paperclip::Attachment オブジェクトが保存される前に保存される場所を変更できるようにすることです (たとえば、foo_secure_action を介してアップロードされたもの) - しかし、これを機能させることはできません。Paperclip::Attachment には :path と :url を含む @options ハッシュがありますが、保存する前にそれらを変更しても、実際に設定される場所には影響しません。これが可能だとしても、それがさらなる結果をもたらすかどうかはわかりません...

このデータを構造化するための別のアイデアを受け入れますが、現時点では、この状況に STI を使用するというアイデアが気に入っています。

4

1 に答える 1

0

これは、イニシャライザーのPaperclip.interpolatesで実行できます。

于 2009-12-16T16:15:27.847 に答える