簡単に言うと、ボタンがあります。それをクリックすると、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">×</a>
</div>