[RUBY-ON-RAILS] 아약스를 통해 플래시 통지를 레일
RUBY-ON-RAILS아약스를 통해 플래시 통지를 레일
긴 이야기를 짧게, 나는 버튼이 있습니다. $에서 사업부와 디스플레이를 : [주의]을 클릭하면, 나는 아약스 요청이 플래시를 얻을 수있는 트리거 할
여기 내 단축도이다 :
<input type="button" id="search" value="display"/>
<div id="notice">
</div>
뷰에서 내 아약스 요청 :
$("#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.여기에 내가, 리치 펙의 대답 덕분에 작업을 가지고 있다는 예입니다. 나는 확실히 플래시 통지가 지속되지 않았다 있도록 flash.now 사용하는 데 필요한.
여기에 내가, 리치 펙의 대답 덕분에 작업을 가지고 있다는 예입니다. 나는 확실히 플래시 통지가 지속되지 않았다 있도록 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>
-
==============================
2.세션
세션
이것은 레일의 세션 변수에 저장되는 플래시에 의해 발생합니다 :
당신이 가진 문제는 내가 새로운 요청으로 아약스 카운트 (이것에 대한 필요성 참조)을 생각하지 않기 때문에, 데이터는 HTTP를 통해 요청하는 다음 번에 계속 것입니다.
--
고치다
나는 처음에 이것을 시도합니다 :
def show respond_to do |format| format.js { flash[:notice] = "my secret number "+rand(0,5)+" !" } end end
당신이 가진 가장 큰 문제는 당신이 ERB 처리기를 사용하여 JS에서 플래시 변수를 처리하고있다. 그것은 당신이 작업 할 수 있도록 자산 프리 D 파일을 사용할 수 없습니다 의미로이 문제입니다.
이 질문을보고 한 후, 왜이처럼 after_filter 콜백을 사용하지 :
#app/controllers/home_controller.rb Class Home < ActionController::Base after_filter { flash.discard if request.xhr? }, only: :show def show respond_to do |format| format.js { flash[:notice] = "my secret number "+rand(0,5)+" !" } end end end
--
최신 정보
당신은 당신의 show.js.erb에 성공 기능을 포함한다 :
#app/views/home/show.js.erb $("#notice").html("<%= flash[:notice] %>");
이 방법은 당신이 application.js에서 전체 아약스 호출을 제거하고 원격으로 대체 할 수있다 : 검색 양식에 대한 사실 :
#app/views/search/index.html.erb <%= form_tag home_show_path, remote: true %>
당신이 format.js의 응답 블록을 사용하는 경우, 레일은 귀하의 의견에 [액션] .js.erb 파일을로드하기 때문에이 작품 이유입니다. 작업이 완료된 후이에만 발생 고려, 그것은 당신의 아약스의 성공 기능에 해당합니다.
이렇게함으로써 상기 한 바와 같이, 당신은 당신의 application.js에서 전체 AJAX 기능을 제거하고 UJS 버전으로 대체 할 수 있습니다
from https://stackoverflow.com/questions/23967390/rails-flash-notice-via-ajax by cc-by-sa and MIT license
'RUBY-ON-RAILS' 카테고리의 다른 글
[RUBY-ON-RAILS] 다른 플랫폼 만들기 들러 사용 다른 보석 (0) | 2020.02.16 |
---|---|
[RUBY-ON-RAILS] 동적 레일에 바인딩 원시 업데이트 SQL을 실행하는 방법 (0) | 2020.02.16 |
[RUBY-ON-RAILS] (3) 여러 레코드와 양식을 제출 레일 (0) | 2020.02.16 |
[RUBY-ON-RAILS] 가장 좋은 방법은 레일 + 포스트 그레스에 임의의 시간 간격으로 기록을 계산하려면 (0) | 2020.02.16 |
[RUBY-ON-RAILS] 액티브는 레일 : 현재 사용자를 제외한 모든 사용자 찾기 (0) | 2020.02.16 |