2016-04-21 43 views
0

我有一個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=✓&region[area]=3:2901 Uncaught SyntaxError: Unexpected token) 

也許這是一個JS語法錯誤,不然我無法正常關閉功能。

回答

0

如果我理解正確,你想讓你的參數以某種方式通過AJAX調用流水線到你的控制器,返回到你的js.erb文件,在那裏它刷新部分?

我的建議是設置傳遞的參數作爲實例變量在你的控制器是這樣的:

calls_controller。RB

def index 
    if params[:region].present? 
    @region = params[:region] 

    @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 

現在你@region實例變量將提供您index.js.erb 在那裏你可以把它傳遞給你想使其他諧音。

index.js.erb的

$('#active').html("<%= escape_javascript render :partial => 'calls/assigned_calls', :locals => { :assigned_calls => @assigned, :region => @region } %>"); 
$('#inactive').html("<%= escape_javascript render :partial => 'calls/unassigned_calls', :locals => { :unassigned_calls => @unassigned, :region => @region } %>"); 

_assigned_calls.html.erb

<%= form_tag calls_path, :method => 'get' do %> 
    <%= select_tag "region[area]", options_from_collection_for_select(Region.order(:area), :id, :area, selected: region.try(:[], :area)), prompt: "Choose Region" %> 
    <%= submit_tag "Select", :name => nil, :class => 'btn' %> 
<% end %> 

另外,我覺得在你的index.html.erb腳本標籤 更好的做法是不喜歡它這個:

<script> 
    $(document).ready(function() { 
    setInterval(function() { 
     $.ajax({ 
     url: 'calls_path', 
     type: "GET", 
     data: { "region": '<%= @region.html_safe %>' } 
     }); 
    }, 5000); 
    }); 
</script> 

如果您有興趣並請回覆我,請對此進行測試:)

+0

感謝您的建議。我剪切/粘貼了這個,並且我在_assigned_calls.html.erb的第5行得到了'未定義的局部變量或方法'region''這是違規行:'<%= select_tag「region [area]」,options_from_collection_for_select(Region .order(:area),:id,:area,選中:region.try(:[],:area)),提示:「選擇區域」%> '有什麼想法? – nulltek

+0

我可以通過將第5行更改爲<%= select_tag「region [area]」,options_from_collection_for_select(Region.order(:area),:id,:area,selected:params [:region] .try( :[],:area)),提示:使用params [:region]而不是局部變量區域來選擇區域%>。不知道爲什麼它沒有正確連接。 – nulltek

+0

當我在我的option_from_collection_for_select中使用params時,它工作正常,但javascript從index.html.erb中提供了「calls?utf8 =✓&region [area] = 4:6387 Uncaught SyntaxError:Unexpected token)」。 – nulltek