Ich habe eine Rails App mit einem Controller/Ansicht namens "Anrufe". Hier ist die grundlegende Controller-Aktion für Index:Schienen Ajax Refresh Teilweise während persistent Params
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
Hier sind meine Ansichten:
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
});
Index .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 (Ansicht Code weggelassen)
<%= 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' %>
Also, was passiert, ist auf Seite laden, wenn ich nicht über die params von: Region übergeben sie die Anrufe setzt ohne scoped werden nach Region. Wenn region_id vorhanden ist, werden Aufrufe ausgeführt, bei denen region_id "1" ist oder die Regions-ID, die vom submit_tag übergeben wird.
Das funktioniert gut in der Steuerung und Ansicht, aber hier ist mein Problem. Meine index.html.erb Ich muss die Teiltöne aktualisieren, OHNE die Params zu stören. Also auf SetInterval muss ich herausfinden, wie die Partials neu zu laden, während die Parameter in der URL beibehalten.
Ich habe versucht, dies herauszufinden mit einer setInterval-Methode, aber ich bin mir nicht sicher, was ich hier 100% tue.
Kann mir jemand einen Rat geben, wie die Teiltöne alle 5 Sekunden aktualisiert werden, während die Parameter beibehalten werden, damit meine Instanzvariablen durch die Aktualisierung bestehen bleiben?
Wenn Sie mehr Kontext und/oder Code benötigen, lassen Sie es mich bitte wissen.
Update Der Versuch, das Javascript basierend auf einer Antwort von einem Benutzer zu überarbeiten und hier ist, was ich habe.
calls?utf8=✓®ion[area]=3:2901 Uncaught SyntaxError: Unexpected token)
Vielleicht ist dies ein JS Syntaxfehler oder ich schließe nicht die Funktion richtig: Ich bekomme
<script>
$(document).ready(function() {
setInterval(function() {
$.ajax({
url: 'calls_path',
type: "GET",
data: { "region": '<%= @region.html_safe %>' }
}), 5000);
});
});
</script>
Die Seite wird geladen, aber wenn es in dem Chrom-Inspektoren auszulösen versuchte.
Danke für den Vorschlag. Ich habe das ausschneiden/eingefügt und ich bekomme "undefinierte lokale Variable oder Methode' region' "in Zeile 5 von _assigned_calls.html.erb. Hier ist die problematische Zeile:' <% = select_tag "region [area]", options_from_collection_for_select (Region .order (: Bereich),: ID,: Bereich, ausgewählt: region.try (: [],: Bereich)), Eingabeaufforderung: "Region auswählen"%> 'Irgendwelche Gedanken? – nulltek
Ich kann diesen Fehler loswerden, indem ich die Zeile 5 in <% = select_tag "region [area]", options_from_collection_for_select (Region.order (: area),: id,: area, selected: params [: region] .try (: [],: Bereich)), Eingabeaufforderung: "Wählen Sie Region"%> mit den Parametern [: region] anstelle der lokalen Variablenregion. Ich bin mir nicht sicher, warum es nicht richtig funktioniert. – nulltek
Wenn ich die Parameter in meiner Option_from_collection_for_select verwenden, funktioniert es gut, aber das Javascript gibt "rufe? Utf8 = ✓ & region [Bereich] = 4: 6387 Uncaught SyntaxError: Unerwartetes Token)" aus der index.html.erb. – nulltek