1

非常に長く、ファイル入力フィールドを含むマルチパート フォームがあります。私のクライアントは、データをリモート サーバーに送信する前に、ユーザーが入力したデータを確認できるようにしたいと考えています。現在動作している実装は、フォーム データを取得して外部 Web サービスに送信するだけです。すでに大量の検証と SOAP 要求のボイラープレートが記述されているため、それらの間にコントローラー アクションを挿入するだけです。したがって、「レビュー」アクションに提供されたフォーム データを取得し、それを「送信」アクションに送信するだけです。

ここまでのコントローラーとビューのフローは次のとおりです。

  • フォームがレンダリングされ、ユーザーがデータを入力し、「続行」をクリックします
  • フォームが検証され、フォーム データが「レビュー」ページに送信されます
  • ビュー ページのアクションはparams[:clean]、人間が判読できるフォーム データを作成して入力します。
  • ビューには、オプション | を使用してテーブルが表示されます。下部に「送信」ボタンがあるデータ

私がこれまでに試したこと:

  • session[:form_data] = paramsこれにより、「ファイルをダンプできません」というエラーが発生します

考慮されますが、可能であれば避けたい:

  • パラメータと POST から送信 URL に入力される「レビュー」ビューに別のフォームを作成する

注目すべきは、アップロードされたファイルがアプリケーションによって処理されていないことです。クライアントの SOAP アーキテクチャがすべてを処理します。フォーム データを保持するページが必要であり、顧客が満足した場合にそれを渡します。

4

1 に答える 1

0

これが私がやったことです

「レビュー」アクションでは:

session[:uploaded_files_array] = Array.new
session[:application_data] = params.except(*exclusions, *files)

if params[:uploaded_file]
  params[:application_data][:uploaded_file] = true
  file_name = session[:current_customer] + "more_stuff"
  uploaded_path = File.join(Dir.tmpdir, file_name)
  File.open(uploaded_path, "wb") do |f|
    f.write(params[:uploaded_file].read)
  end
  session[:uploaded_files_array] << uploaded_path
end

「送信」アクションで:

uploaded_files_array = session[:uploaded_files_array]  
params = session[:application_data]  
unless uploaded_files_array.blank?  
    Resque.enqueue(ConfirmationDocumentUploader, uploaded_files_array, session[:current_customer] ["DocumentID"] )
end

基本的に、アップロードされたファイルをファイルシステムの一時的な場所に書き込み、その場所をセッション内に保存しました。また、関連するすべてのパラメーターを params からセッションにコピーしました。次に、送信プロセス中に、セッションから上書きパラメーターを読み取り、パスの配列を使用してファイルのワーカーをキューに入れるだけです。

これが誰かの役に立てば幸いです。顧客が自分の選択を確認できるようにレビュー ページを用意することは、かなり一般的な要望であると思います。

于 2012-06-29T22:14:03.163 に答える