0

jQuery File Upload gem を使用してファイルをアップロードしています。

ファイルのアップロード時にフラッシュ通知を表示したいのですが、画像をアップロードしても何も起こりません。

私はAjaxを介してこれを行っています。復元、削除、アーカイブなどの他のすべてのアクションは機能しています。以下は私のコントローラーアクションです:

def upload
    set_access_control_headers
    @picture = Picture.new(picture_params)
    if params[:picture][:file]
      @picture.update_attributes({
          file: params[:picture][:file],
      })
    end
    flash[:notice] = "Picture is uploaded sucessfully!"
    @frame = @picture.frame
    @pictures = @frame.pictures.non_archived_pictures.paginate(:page => params[:page], :per_page => 12)
    @frame.notify_add(@picture.file_url, @picture.message)
    render json: {files: @frame.pictures.collect{|pic| pic.to_jq_upload}}
  end

これが upload.js.erb ファイルです。

$("#non_archived_pictures").replaceWith('<div id=non_archived_pictures><%= j render :partial=>"frames/current_pictures" %></div>');
$(".page-wrapper').after('<%= j render :partial=>"frames/picture_modal",:locals=>{:picture=>@picture} %>")
$(".custom-header").after("<div class='alert alert-success' role=alert><%= flash[:notice] %></div>")
$(".alert-success").remove()
4

1 に答える 1

0

これは Ajax リクエストでflash あるため、現在のリクエストでクライアントが自動的に使用できるわけではありません。返される JSON オブジェクトの一部として通知を渡すことができます。

 render json: {files: @frame.pictures.collect{|pic| pic.to_jq_upload}, notice: "Picture is uploaded sucessfully!"}

JavaScript ファイルでは、渡されたキーを使用してメッセージにアクセスできますnotice

また、レンダリングしたい場合はjs、応答をレンダリングする必要があります。jsonupload.erb.js

アップデート

フラッシュは、アクション間で一時オブジェクトを渡す方法を提供します。フラッシュに配置したものはすべて、次のアクションにのみ公開され、その後クリアされます。例:

def creat
  flash[:notice] = "Post successfully created"
  redirect_to @post
end

redirect_to上記の例では、新しいリクエストが呼び出しを通じてサーバーに送信されるflashと、ビューで使用できるようになります。

更新 2

flash.now現在のリクエストのフラッシュ コンテンツにアクセスするために使用します。

flash.now[:notice] = "Picture is uploaded sucessfully!"
于 2014-10-21T14:24:54.310 に答える