2016-12-09 9 views
0

私はRailsアプリケーションでファイルのアップロードを管理するためにShrineを使用し始めています。たとえば、複数のタイプ(画像、動画、音声など)のファイルを添付できるモデルPostがあり、アップロード時にこれらのファイルが処理されるとします。ファイルタイプごとにアップローダを使用することをお奨めしますか?またはすべてのファイルタイプに1つのアップローダを一緒にご使用ください神社のファイルアップロード - すべてのファイルタイプのアップローダまたはファイルタイプごとのアップローダ?

また、アップロード時にPostレコードの属性file_typeを自動的に更新するのがベストプラクティスですか?

おかげ

答えて

1

あなたが異なったファイルの種類に応じて、添付ファイルのロジックを処理するために必要になるので、ファイルの種類ごとのアップローダーを持ち、さらには異なるストレージサービスを選択することをお勧めします。

たとえば、サムネイルを自分で処理したり、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 
+0

ありがとう:あなたの2番目の質問については


は、あなたは神社の添付ファイルのセッターをオーバーライドすることができます。私はまだ2つの質問があります:** 1。**複数のアップローダーを同じ列の "ファイル"にフックできますか?これにより、追加の条件付きフォームフィールドが回避されます。はいの場合、投稿されたフォームに使用するアップローダを教えてください** 2。**神社のアタッチメントセッターをオーバーライドして説明できますか?ファイルがアップロードされてレコードに添付されるたびに 'file =(value)'メソッドが実行されますか?ありがとう – R4ttlesnake

+1

** 1 **この場合、(モデルを通過するのではなく)直接 'Shrine :: Attacher'を使用する必要があります。[this guide](http://shrinerb.com/rdoc/files/doc /attacher_md.html)。 ** 2。**このメソッドは、新しいファイルが割り当てられるたびに実行されます。それは、ちょうど普通の属性作家であり、神社のさらなるアップロードと宣伝は、この方法を再び引き起こさないでしょう。 –

関連する問題