2

次のモデルがあります。

  • テンプレート
  • 書類

どちらも 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 を使用して、あるレコード/モデルから別のレコード/モデルにファイルをコピーする方法について、いくつかの例またはベストプラクティスを持っている人はいますか?

4

0 に答える 0