Schienen check_box_tag how to pass " - Wert, wenn geprüft ajaxily
Auf meiner index-Seite für meine Aufgabe, ein Modell, das ich zeigen möchte, eine checkbox für jede Zeile entspricht dem booleschen Feld "abgeschlossen" in meine Datenbank-Tabelle.
Derzeit mein code wird in der Methode "Complete", aber es enthält nicht den Wert der checkbox, das der Benutzer gerade gemacht hat (d.h. wenn Sie nur ein Häkchen in der box, es nicht true übergeben zu meinem "Complete" - Methode).
Wie kann ich pass den Wert, den der Benutzer gerade durchgeführt - entweder aktiviert oder nicht aktiviert?
/views/tasks/index.html-Code.erb
<% @tasks.each_with_index do |task, i| %>
<tr>
<td><%= check_box_tag 'Complete', task.complete, task.complete, :data => {:remote => true, :url => url_for( :action => 'complete', :id => task.id, :complete => task.complete ), :method => :put}, :class => 'input-large' %></td>
</tr>
<% end %>
/Controller/tasks_controller#komplette
# PUT /complete/1
def complete
@task = Task.find(params[:id])
p "inside complete"
p "complete = #{params[:complete]}"
@task.complete =
if @task.update_attributes(params[:task])
p "inside update"
render :text => "success"
else
p "inside error"
end
end
Sie schreiben ein Ereignis onclick oder onchange-Ereignis zu schicken, um ein Ajax-call. Wir können nicht per ajax-call auf check_box_tag ähnlich wie link_to.
Bitte. Können Sie uns ein kleines Beispiel, wie es aussieht in Ihrer view-Datei und js-code?
Bitte. Können Sie uns ein kleines Beispiel, wie es aussieht in Ihrer view-Datei und js-code?
InformationsquelleAutor Catfish | 2013-03-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie mit jQuery sind, können Sie schreiben, ein Klick-Ereignis.
Ok, ich habe versucht, Ihre Lösung, aber ich bekomme die Fehlermeldung: "konnte nicht Aufgabe ohne id". Wie kann ich pass die id?
Bearbeitet meine Antwort
Es gab keine data-post-id auf meinem checkbox-element so ich habe gerade meine check_box_tag die id als id meine Aufgabe-und dann Hinzugefügt, dass dies meine ajax-Daten:
id: $(this).attr('id')
InformationsquelleAutor Srikanth Jeeva
Den Vorschlag aus, diese Frage im Schienen/jquery-ujs github-repo für mich gearbeitet: https://github.com/rails/jquery-ujs/issues/440#issuecomment-197029277
Für Sie wäre es:
InformationsquelleAutor nates
Als der Schienen 4, Sie sollten in der Lage sein zu Graben, alle JS aus der ursprünglichen Antwort. Der code in deiner Frage sollte nur der Arbeit wegen jQuery UJS Magie.
Es stellt sich heraus, dass das hinzufügen
remote: true
zu einer Eingabe wird die jquery-ujs zu machen, ajax-y in all die schönen Möglichkeiten. Thoughtbot ist "Eine Tour von Rails jQuery-UJS" kurz berührt diese (und viele andere gute Dinge zur Verfügung); die "Unauffällig scripting-Unterstützung für jQuery" Seite in der jQuery-UJS-wiki hat eine Gründliche Arbeit.InformationsquelleAutor Jim Meyer
Diese Weise in Ihrem controller, den Sie bekommen können params[:Abschluss].
Und Sie implementieren sollten, abgeschlossen.js.erb ihn neu zu Rendern checkbox, also, als Nächstes klicken Sie auf senden inverse Wert
Oder Sie implementieren können, js-Ereignis klicken
und vergessen Sie nicht, um data-post-id, param, um Ihre Kontrollkästchen
:remote => true
auf Ihre erste option, so legt es ajaxily, aberparams[:complete]
enthält nicht den korrekten Wert, den der Benutzer gerade gemacht hat (aktiviert oder deaktiviert), es enthält nur den Wert in die db.In deinem zweiten Beispiel, ich hatte zum ändern der url, um
$(this).data('url')
weil es keine data-post-id, die auf das generierte checkbox-element. Der ajax-Aufruf funktioniert, aber es immer noch nicht enthalten der Wert, den der Benutzer gerade gemacht hat (aktiviert oder deaktiviert), sondern hält nur die Anzeige den Wert in die db.im ersten Beispiel habe ich die ... weglassen Duplikate, ich habe es kopiert, in mein env und es funktioniert
In der zweiten schrieb ich, "und vergessen Sie nicht, um data-post-id, param, um Ihre checkbox"
Ich schien zu haben, übersehen Sie das Stück über das hinzufügen einer data-post-id, param. Das macht Sinn, obwohl.
InformationsquelleAutor Konstantin Ilchenko