Flash уведомление о загрузке изображения в Rails

Я использую драгоценный камень jQuery File Upload для загрузки файлов.

Я хочу показать флэш-уведомление о загрузке файла, но когда я загружаю изображение, ничего не происходит.

Я делаю это через 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()

1 ответ

Так как это запрос Ajax, flash автоматически не доступно клиенту в текущем запросе. Вы можете передать уведомление как часть возвращаемого объекта JSON.

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

В вашем файле JavaScript вы можете получить доступ к сообщению, используя переданный notice ключ.

Вы также должны представить свой ответ как js и не json если ты хочешь upload.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!"
Другие вопросы по тегам