我有一個Rails應用程序,帶有一個名爲「calls」的控制器/視圖。下面是指數基本控制器動作:Rails Ajax刷新部分持續參數
calls_controller.rb
def index
if params[:region].present?
@assigned = Call.where(region_id: params[:region][:area]).assigned_calls.until_end_of_day
@unassigned = Call.where(region_id: params[:region][:area]).unassigned_calls.until_end_of_day
else
@assigned = Call.assigned_calls.until_end_of_day
@unassigned = Call.unassigned_calls.until_end_of_day
end
end
這裏是我的觀點:
index.js.erb的
$('#active').html("<%= escape_javascript render :partial => 'calls/assigned_calls', :locals => {:assigned_calls => @assigned} %>");
$('#inactive').html("<%= escape_javascript render :partial => 'calls/unassigned_calls', :locals => {:unassigned_calls => @unassigned} %>");
$(".select").select2({
placeholder: "Select One",
allowClear: true
});
指數.html.erb
<div id="active">
<%= render "assigned_calls" %>
</div>
<div id="inactive">
<%= render "unassigned_calls" %>
</div>
<script>
$(document).ready(function() {
setInterval(function() {
$.ajax('calls/<%= params[:region][:area] %>');
} , 5000);
});
</script>
_assigned_calls.html.erb(省略視圖代碼)
<%= form_tag calls_path, :method => 'get' do %>
<p>
<%= select_tag "region[area]", options_from_collection_for_select(Region.order(:area), :id, :area, selected: params[:region].try(:[], :area)), prompt: "Choose Region" %>
<%= submit_tag "Select", :name => nil, :class => 'btn' %>
所以發生了什麼事是在頁面加載,如果我沒有的PARAMS:區域通過它設置而不範圍的呼叫按地區劃分。如果region_id存在,那麼它將region_id爲「1」的調用範圍或從submit_tag傳遞的任何區域ID作爲範圍。
這在控制器和視圖中正常工作,但這裏是我的問題。我的index.html.erb我需要刷新部分,而不會干擾通過的參數。所以在setInterval我需要弄清楚如何重新加載partials,同時保持在URL中傳遞的參數。
我試圖找出使用setInterval方法,但我不知道我在這裏做什麼100%。
有人可以給我一些關於如何每5秒鐘刷新一次部分的建議,同時保持參數,所以我的實例變量通過刷新持續嗎?
如果您需要更多的上下文和/或代碼,請讓我知道。
更新 試圖根據用戶的答案返回javascript,這裏是我的。
<script>
$(document).ready(function() {
setInterval(function() {
$.ajax({
url: 'calls_path',
type: "GET",
data: { "region": '<%= @region.html_safe %>' }
}), 5000);
});
});
</script>
該頁面將加載但是當它試圖在Chrome檢查觸發我得到:
calls?utf8=✓®ion[area]=3:2901 Uncaught SyntaxError: Unexpected token)
也許這是一個JS語法錯誤,不然我無法正常關閉功能。
感謝您的建議。我剪切/粘貼了這個,並且我在_assigned_calls.html.erb的第5行得到了'未定義的局部變量或方法'region''這是違規行:'<%= select_tag「region [area]」,options_from_collection_for_select(Region .order(:area),:id,:area,選中:region.try(:[],:area)),提示:「選擇區域」%> '有什麼想法? – nulltek
我可以通過將第5行更改爲<%= select_tag「region [area]」,options_from_collection_for_select(Region.order(:area),:id,:area,selected:params [:region] .try( :[],:area)),提示:使用params [:region]而不是局部變量區域來選擇區域%>。不知道爲什麼它沒有正確連接。 – nulltek
當我在我的option_from_collection_for_select中使用params時,它工作正常,但javascript從index.html.erb中提供了「calls?utf8 =✓&region [area] = 4:6387 Uncaught SyntaxError:Unexpected token)」。 – nulltek