我正在編寫一個Rails 4.0.2應用程序,並試圖在發生AJAX事件後在我的視圖中顯示Flash通知。ajax調用後,Rails不顯示Flash消息
在我看來,我顯示一個用戶可以點擊幾天的日曆。當他們這樣做時,我通過一個更新我的模型的onclick事件處理程序來觸發一個AJAX事件,這個事件處理程序可以添加或刪除記錄。在事件發生後,我完成頁面刷新以顯示更新的結果。
我發現我不得不在JS單擊事件期間進行頁面刷新,以便正確更新視圖。僅在控制器中進行重定向或渲染是不夠的。
所以,爲了這個效果,我已在我的控制器閃存通知...
def set_conflicts
@conflict = @member.conflicts.for_date(params[:date]).first
if @conflict
@conflict.destroy
else
conflict_date = Date.parse(params[:date])
unless Conflict.create(
month: conflict_date.month,
day: conflict_date.day,
year: conflict_date.year,
member: @member
)
flash[:alert] = 'Oops, there was a problem updating conflicts'
end
end
flash[:notice] = 'This is a test!'
redirect_to manage_member_conflicts_path(@member)
end
...在我application.haml已包括以下Flash顯示的邏輯...
...
%body
= p flash.inspect
- flash.each do |type, message|
= content_tag(:div, message, :class => "flash-#{type}")
= render 'devise/menu/login_items'
= yield
注:我使用HAML代替ERB在我的意見
然而,沒有質W我嘗試的帽子,Flash消息不顯示。其他一切按預期工作,除了的的快速消息,我一直沒能弄清楚爲什麼。
我懷疑它與我正在做的與重定向(甚至可能turbolinks)結合的AJAX刷新有關,但我已經通過其他的答案看過,因此無法讓它工作。顯然,我錯過了一些東西。
這裏是JS點擊處理程序(它很簡單):
window.calendarClick = (eventDate, linkURL) ->
event = $(document.getElementById(eventDate))
event.toggleClass('selected')
# Set or Remove conflicts
$.ajax
url: linkURL
data:
date: eventDate
# Refresh the page
$.ajax
url: '',
context: document.body,
success: (s,x) ->
$(this).html(s)
很好的答案,謝謝Rich。我的主要問題是找到一種有效的方法來添加/刪除記錄基於用戶點擊的日期。我會按照你的建議調查重構。我已經嘗試了幾種設置請求標頭的方法,但是我確信這只是我對JS再次展示的缺乏經驗。 – Donovan
想聊天嗎?這是你應該能夠做得相對簡單的事情 –
如果/當你有時間時,我會。我創建了聊天室... http://chat.stackoverflow.com/rooms/44968/chat-with-donovan – Donovan