あなたが異なったファイルの種類に応じて、添付ファイルのロジックを処理するために必要になるので、ファイルの種類ごとのアップローダーを持ち、さらには異なるストレージサービスを選択することをお勧めします。
たとえば、サムネイルを自分で処理したり、Cloudinaryなどのサービスを使ってオンザフライで生成したりすることができます。
一方、動画は異なるツールを使用して別々に処理する必要があります。その場合、時間がかかることがありますので、などのサービスを使用することをおすすめします。
一般に、アップロードしているファイルのサイズ、処理時間、保存されているファイルの場所などによって異なるShrineプラグインをロードすることができます。BaseUploader
には、一般的な添付ロジック次にImageUploader
,VideoUploader
,AudioUploader
を継承します。
これらのアップローダは、要件に応じて複数のアップローダに分岐することもできます(例:PhotoUploader
またはCoverUploader
)。しかし、あなたは間違いなく異なるファイルタイプのための個別のアップローダを持っていることを望んでいます。ヤンコ-M @あなたの包括的な答え(と驚くほどの神社のために)のための
class Post
include FileUploader[:file]
def file=(value)
super
self.file_type = (file ? file.mime_type : nil)
end
end
ありがとう:あなたの2番目の質問については
は、あなたは神社の添付ファイルのセッターをオーバーライドすることができます。私はまだ2つの質問があります:** 1。**複数のアップローダーを同じ列の "ファイル"にフックできますか?これにより、追加の条件付きフォームフィールドが回避されます。はいの場合、投稿されたフォームに使用するアップローダを教えてください** 2。**神社のアタッチメントセッターをオーバーライドして説明できますか?ファイルがアップロードされてレコードに添付されるたびに 'file =(value)'メソッドが実行されますか?ありがとう – R4ttlesnake
** 1 **この場合、(モデルを通過するのではなく)直接 'Shrine :: Attacher'を使用する必要があります。[this guide](http://shrinerb.com/rdoc/files/doc /attacher_md.html)。 ** 2。**このメソッドは、新しいファイルが割り当てられるたびに実行されます。それは、ちょうど普通の属性作家であり、神社のさらなるアップロードと宣伝は、この方法を再び引き起こさないでしょう。 –