5

アップローダ (「ファイル」) を含むモデル オブジェクトの作成と編集の両方にフォーム パーシャルを使用しています。

= simple_form_for(@document) do |f|
= f.error_notification

.form-inputs
  = f.input :event_id
  = f.input :name
  = f.input :file
  = f.hidden_field :file_cache

.form-actions
  = f.button :submit

編集フォームでは、既にアップロードされたファイルに関連付けられたファイル名を取得するのではなく、「ファイルが選択されていません」と表示されます。アップローダが nil ではないことをウィジェットに認識させ、アップローダからのファイル名を使用する方法はありますか?

4

1 に答える 1

3

セキュリティ上の理由から、ファイル入力フィールドに手動で値を設定することはできません。ファイル名はブラウザによって選択されたファイルを反映していますが、ファイルはその時点ですでにアップロードされているため、なぜ @document.file? あなたが見れば真実を示すでしょう。file_cache は、ファイル フィールドの入力値を上書きすることと混同しないように、既に送信された属性を保存して再送信するためにのみ使用されます。たとえば、隠しフィールドを入力フィールドに変更すると、同じ「ファイルがありません」というメッセージが表示されます。

これはあなたが望むものではないことを理解していますが、これを処理するより良い方法は、入力を「ファイルを置換」のようなものに再ラベル付けし @document.file if @document.file?、フィールドの上を介してファイルnaveをレンダリングすることです。

于 2013-02-14T22:51:45.777 に答える