【问题标题】:Flash notice on image upload in Rails在 Rails 中上传图片的 Flash 通知
【发布时间】:2014-10-21 13:49:06
【问题描述】:

我正在使用 jQuery File Upload gem 上传文件。

我想在文件上传时显示 Flash 通知,但是当我上传图片时没有任何反应。

我通过 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()

【问题讨论】:

  • upload.js.erb 在控制器中调用显式渲染时永远不会渲染。您只能发送一个响应,json 或 js。另外 - 此处不要使用 flash - flash 存储在会话中,并将在下一个请求时显示。
  • 您可以使用flash.now[:notice]请在我的回答中查看更新

标签: ruby-on-rails ruby jquery-fileupload-rails


【解决方案1】:

由于这是一个 Ajax 请求,flash 在当前请求中不会自动提供给客户端。您可以将通知作为您返回的 JSON 对象的一部分传递。

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

在您的 JavaScript 文件中,您可以使用传递的 notice 键访问消息。

如果您希望您的upload.erb.js 被呈现,您还需要将您的回复呈现为js 而不是json

更新

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!"

【讨论】:

  • 感谢@Ali。但我仍然在页面重新加载时找到它。当我重新加载页面时,通知出现,否则不会。
  • 那是因为当您在当前请求中设置 flash 时,它会存储在会话中,它仅在浏览器发送到您的服务器的下一个请求中才可用,之后它就会消失
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-11-01
  • 2010-12-24
  • 1970-01-01
  • 1970-01-01
  • 2011-03-16
  • 2012-08-08
  • 2011-09-08
相关资源
最近更新 更多