フォームの検証を実行するときに、Refile とその複数のファイル オプションに関する問題があります。
添付ファイル付きのフォーム (「docs A」としましょう) を送信し、フォームが検証に失敗した場合 (電子メールが必要だったためとしましょう)、refile は次のように動作します。
- 他のファイルが添付されておらず、フォーム (今回は有効なフォーム) を再送信すると、「docs A」が保持され、キャッシュからストア フォルダーに移動されます (すべて refile によって行われます)。これはすべて良いです。
- 他のファイル ("docs B") がフォームに含まれていて、後者が送信された場合、"docs B" のみが考慮されます (フォームが有効か無効かに関係なく、:append 値に関係なく -- チェックします)。以下のモデル)。フォームが有効だった場合、「docs B」のみが保持されます。フォームが無効な場合は、フォームを有効にして再送信すると、「ドキュメント B」が保持されます (新しいファイルを添付しない限り)。
「docs A」と「docs B」も単一のファイルである可能性があります。同じ動作になります。
私は次のモデルを持っています
class User < ActiveRecord::Base
has_many :documents, dependent: :destroy
accepts_attachments_for :documents, append: true, attachment: :file
end
class Document < ActiveRecord::Base
belongs_to :user
attachment :file, type: :document
end
形式は次のとおりです。
<%= f.attachment_field :documents_files, multiple: true, direct: true, presigned: true %>
refile 0.5.5 を使用しています。
すでに隠し入力を含めようとしました
<% @user.documents.each do |doc| %>
<%= f.hidden_field "documents_files", multiple: true, value: {id: doc.file_id, filename: doc.file_filename, size: doc.file_size} %>
<%# end %>
ただし、新しい添付ファイルが含まれている場合は「オーバーライド」されます。
refile の複数と追加の動作が実際に機能しているかどうか、または私の実装が間違っているかどうか疑問に思っていました。
予想される動作は、新しい添付ファイルが既存の添付ファイルに追加されることです (つまり、"docs A" + "docs B")。
助けていただければ幸いです!