次のモデルがあります。
- テンプレート
- 書類
どちらも CarrierWave Uploader を搭載しており、ファイルをレコードに添付できます。ファイルは MongoDB の GridFS に保存されます。それはうまくいきます。
Document
ユーザーは、 を使用して新しい を作成できるはずTemplate
です。つまり、添付されているファイルをTemplate
新しく作成されたDocument
オブジェクトにコピーする必要があります。
ファイルをコピーするには、次のコードを使用します。
template = Template.find(tmpl_id)
new_document = Document.new
new_document.source = template.source.file
source
キャリアウェーブ アップローダーがマウントされている属性です。このサンプルは実際に動作します。ただし、1 つの GridFS チャンクよりも大きくないファイルのみ。それより大きいファイルはコピーされません。つまり、エラー メッセージは表示されませんが、ターゲット ファイルのサイズは 0 バイトのままです。
CarrierWave は、次のように Gemfile に含まれています。
gem "carrierwave-mongoid", '0.3.0.alpha', git: "git://github.com/jnicklas/carrierwave-mongoid.git", branch: "mongoid-3.0"
(現実の世界はもう少し複雑です。問題に集中するために、ここではいくつかのことを単純化しました。)
CarrierWave と GridFS を使用して、あるレコード/モデルから別のレコード/モデルにファイルをコピーする方法について、いくつかの例またはベストプラクティスを持っている人はいますか?