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

更新

flash 提供了一种在动作之间传递临时对象的方法。你放在闪光灯里的任何东西都只会暴露在下一个动作中,然后被清除。例子:

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

在上面的示例中,一旦通过redirect_to调用将新请求发送到服务器,flash视图就可以使用。

更新 2

用于flash.now访问当前请求中的 flash 内容:

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