我有一个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