Rails のフラッシュ通知を ajax 経由で送信する 質問する

Rails のフラッシュ通知を ajax 経由で送信する 質問する

簡単に言うと、ボタンがあります。それをクリックすると、Ajaxリクエストがトリガーされ、flash[:notice]が取得され、div in$に表示されます。

私の簡潔な見解は次のとおりです。

 <input type="button" id="search" value="display"/>

 <div id="notice">

 </div>

ビュー内の私の Ajax リクエスト:

$("#search").submit(function(){
                            $.ajax({
                                type: "POST",
                                url: //url to my show action
                                success: function(data){
                                      /*$("#notice").html("<%= flash[:notice] %>");
                                        $("#content").html(data);*/
                                }
                            });
                            return false;
                    });

私のコントローラー:

def HomeController <  ActionController::Base
  def index

  end

  def show
    respond_to do |format|
    format.js {  flash[:notice] = "" + count.to_s + " results found for " + params[:query][:search_key] + "" }
    end
    #render :partial => 'search'
  end
end

私の show.js.erb

#app/views/dashboard_home/show.js.erb
$("#notice").html("<%=j flash[:notice] %>");

$("#content").html("<%=j render partial: "search" %>");

問題は、ボタンをクリックすると、通知が正常に表示されることです。しかし、次のクリックでも同じ通知が続きます。検索部分にテーブルが含まれています。助けてください。

ベストアンサー1

これは、Rich Peck の回答のおかげで動作するようになった例です。flash.nowフラッシュ通知が持続しないようにするために使用する必要がありました。

ビュー内の AJAX トリガー:

<%= link_to "Email report", users_path, remote: true %>

コントローラ:

# app/controllers/users_controller
class UsersController < ApplicationController

  def index
    # do some things here

    respond_to do |format|
      format.js { flash.now[:notice] = "Here is my flash notice" }
    end
  end
end

レンダリングされたビュー:

# app/views/users/index.js.erb
$("#flash").html('<%= j render partial: "shared/notice_banner" %>');

レイアウト内でフラッシュ通知が表示される場所:

# app/views/layouts/application.html.erb
<div id="flash">
  <% if notice.present? %>
    <%= render partial: "shared/notice_banner" %>
  <% end %>
</div>


# app/views/shared/_notice_banner.html.erb
<div data-alert class="alert-box">
  <%= notice %>
  <a href="#" class="close">&times;</a>
</div>

おすすめ記事