2009-05-06 6 views
1

複数のファイルをアップロードするために、ビュー内で複数のファイルフィールドを使用しています。ユーザーにアップロードの進捗状況を知らせたいと思います。私はこのようなものを使って試しましたコントローラから見えるようにフィードバックを提供

def create 
    params[:upload_data].each do |file| 
    unless (file =="" or file== nil) 
    @photo = Photo.create({:approved => false, :user_id => @current_user.id})  
     @result = "Uploading #{file.original_filename}" 
      render :update do |page| 
      page.insert_html(:bottom, 'progress', :partial => 'partials/result') 
      end 
     #... perform upload 
end 

私はユーザーにフィードバックを削除するとうまく動作します。しかし、それが複数のレンダリングエラーで失敗します。私は誰もこれを行う方法を知っているのだろうかと思っていた。

答えて

2

レンダリングを複数回呼び出すことはできません。レンダリングは、コントローラメソッドが戻るときにのみ使用する必要があります。

これを動作させるには、おそらくajaxを使用してリクエストを行う方法を変更する必要があります。その後、各アップロードはページ上の何かを更新し、javascriptは次の「このファイルをアップロードしてから更新」を実行します。

編集:私はフロントエンドの人ではないので、実際の作業用コードを与えることはできませんが、このようなものになります。現在、複数のファイルをパラメータとしてコントローラに送信しています。これを変更して、バックエンドが一度に1つのファイルのみを処理するようにする必要があります。これは、フロントエンドを変更して、バックエンドへの別々の要求を行うことを意味します。ちょうどhtml形式ではできません - javascriptが必要です。コントローラーは、rjsに更新 "処理済みファイルxyz"を返信するようにレンダリングします。クライアント側のコードは、すべてのファイルがアップロードされるまで別のアップロードを開始します。私は大成功でこれを使用しました

+0

ありがとうございますが、どうすればフィードバックを求めることができますか?どんな例?ありがとう – Anark

1

SWFUpload

それは、アップロードを行うフラッシュ制御だ、あなたはテキストまたは%バーを使用するかどうか、HTMLのフロントエンドを提供します。

1

ワークワーキングをバックグラウンドワーカーとして使用している場合は、進捗情報を保存して、javascriptを使用してページ上のプログレスバーを更新することができます。

関連する問題