記事の作成、読み取り、更新、削除を処理する Web アプリケーションがあり、各記事に画像のギャラリーが必要であるとします。Article と Gallery を 1 対 1 の関係にし、Gallery と Media を 1 対多の関係にする必要があります。
HTML5 はマルチアップロードのような多くの機能を提供するので、この優れたhttp://blueimp.github.io/jQuery-File-Upload/プラグインを使用したいと考えています。問題は、他のフォームのデータのように「メモリ内」でファイルのアップロードを処理する方法ですか?
たとえば、新しい記事を作成するためのページを表示すると、記事のデータ フィールドに入力し、アップロードする画像を選択できるはずです。次に保存ボタンをクリックすると、画像のアップロードが開始され、その後フォームが送信されます。検証が失敗した場合でも、画像はフロントエンドに表示されますが、サーバー側では何も保存されません。
解決策の 1 つは、フォーム全体を表示する前に「エンティティ セッションの一時 ID を作成する」のようなものを作成し、その ID を使用してアップロードを保存するための一時ディレクトリを作成できるため、保存に成功した後、これらの画像を適切なディレクトリに移動できますが、どのように「エンティティセッションの一時IDを作成する」には?
私が考えるもう1つの解決策は、「編集IDを使用する」アプローチです。これは、以前に保存したギャラリーIDでアップロードを処理できるためですが、新しい空白の記事をギャラリーに保存できない場合があるため、フィールドの一部を空にすることはできませんデシベルで。
Rails については、https://github.com/thoughtbot/paperclip gem を見ました。Readme には次のように書かれています。
Paperclip は、Active Record の簡単なファイル添付ライブラリとして意図されています。その背後にある意図は、セットアップをできるだけ簡単に保ち、ファイルをできるだけ他の属性と同じように扱うことでした。これは、ActiveRecord::Base#save が呼び出されるまで、ディスク上の最終的な場所に保存されず、nil に設定されている場合は削除されないことを意味します。
私の質問は、それがどのように機能するかです。