簡體   English   中英

沒有頁面重新加載的警報Rails AJAX

[英]Alerts without page reload Rails AJAX

我有一個Snippit模型,我希望用戶能夠從列表中刪除一個Snippit,然后顯示一條警告,說它已被刪除,全部使用ajax。 我已經弄清楚了如何進行實際的刪除,但是沒有警報。

這是代碼:

snippits_controller.rb

  def destroy
    @snippit = Snippit.find(params[:id])
    @snippit.destroy
    respond_to do |format|
      format.html { redirect_to snippits_url}
      format.json { head :no_content }
      format.js {render :alert => "Sippit destroyed. "}
    end
  end

destroy.js.erb

$('#snippit_<%= @snippit.id %>').remove();

index.html.erb

<% @snippits.each do |snippit| %>
      <span class="panel panel-default" id="snippit_<%= snippit.id %>">
      <%= link_to edit_snippit_path(snippit), :class => "text" do %>
      <div class="panel-body">
        <h3 class="text"><%=snippit.title%></h3>
          <p class="trash"><%= link_to snippit, method: :delete, remote: true do %>
            <i class="fa fa-2x fa-trash-o"></i>
          <% end %></p>
          </div>
          <% end %>
          </span>
    <% end %>

任何幫助都將不勝感激:)

如果您想獲得JS警報響應,則需要以下類似的內容

format.js {render js: "alert('Sippit destroyed.');"}

上面的format.js呈現意味着您正在呈現JS響應。 您的警報render :alert => "Sippit destroyed. "僅適用於HTML響應,因為flash[:alert]是在HTML頁面中呈現的,但是由於呈現的是JS響應,因此您可以執行JS警報實現上方,或者您通過如下方式部分更新HTML頁面以更新Flash消息

destroy.js.erb

$('#snippit_<%= @snippit.id %>').remove();
$('#flash_container').html('<%= j render partial: "flash_container" %>');

更新(為方法2添加了工作控制器代碼:使用上面的destroy.js.erb)

def destroy
  @snippit = Snippit.find(params[:id])
  @snippit.destroy
  respond_to do |format|
    format.html { redirect_to snippits_url}
    format.json { head :no_content }
    format.js { flash.now[:alert] = @snippit.destroyed? ? 'Sippit destroyed.' : @snippit.errors.full_messages }
  end
end

我在上面為format.js添加了故障處理程序代碼。 這將設置閃光警報消息成是“Sippit摧毀”如果@snippit被成功摧毀,或進入“有些未能摧毀錯誤”,如果@snippit都沒有被破壞。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM