2

CarrierWave と Nested Form Gem を使用しています。Carrierwave github ページ (https://github.com/jnicklas/carrierwave) の「フォームの再表示全体でアップロードを機能させる」というタイトルのセクションを使用すると、ユーザーが間違いを犯した場合でもキャッシュを正常に保存できます。ファイルが保存されます。初めてページにアクセスして [ファイルのアップロード] をクリックすると、ファイルの名前と、アップロードされたファイルの種類を示す小さなサムネイル アイコンが表示されます。

ただし、再表示するとファイル入力ボタンが空白になり、アイコンが消えます。ただし、有効な情報で再度送信し、ファイル入力ボタンをそのままにしておくと、新しいリソースが作成されるため、そこにあることはわかっています。これが私のコードのスニペットです。

<%= nested_form_for @resource, :html=>{:multipart => true } do |f| %>
  <p>
      <%= f.label :title %><br />
      <%= f.text_field :title %>
  </p>

  <%= f.fields_for :attachments do |attachment_form|  %>
    <p>
        <%= attachment_form.label :file %>
        <% if !attachment_form.object.file.path.blank? %>
          <% file_info = get_cache_file_info attachment_form.object.file.path %>
          <%= image_tag(File.join('/tmp/cache/', file_info[:folder]))  #THIS DISPLAY CORRECTLY %>
        <% end %>
        <%= attachment_form.file_field :file %>
        <%= attachment_form.hidden_field :file_cache %>
    </p>
    <%= attachment_form.link_to_remove "Remove this attachment" %>
  <% end %>
  <%= f.link_to_add "Add attachment", :attachments %>
  <p><%= f.submit %></p>
<% end %>

アイコンを表示するためにHTMLファイルの入力を編集する必要があるのか​​ 、それとも他のRails Wayでこれを処理する必要があるのか​​ 疑問に思っています。また、image_tag は正しく表示されますが、ユーザーがテキスト ファイルをアップロードするアプリケーションでは、画像はあまり役に立ちません。

前もって感謝します!

更新 「input」タグの値を次のように設定しようとしました:

<%= attachment_form.file_field :file, :value => "#{File.join(file_info[:folder], '/',attachment_form.object.file.identifier)}" %>

それもうまくいきませんでした。「input」タグの値は正しく設定されていますが、「ファイルが選択されていません」と表示されます。

4

1 に答える 1

0

CarrierWave の紹介では、これはあまり明確ではありませんが、コードが「正しく」機能しているように思えます。キャッシュ フィールドは、有効な送信後に添付ファイルが確実に保存されるようにするためのものです。

このドキュメントでは、おそらくセキュリティ上の理由から、ファイル入力要素の FileList を読み取り専用にする必要があることを説明しています。

于 2013-10-17T10:42:31.793 に答える