2017-02-04 2 views
0

Ich erstelle einfache Quiz-App. Bisher habe ich Cocoon gem implementiert, das das Erstellen verschachtelter Formulare ermöglicht. Alles funktioniert super, außer dass ich einige Variablen teilweise an Cocoon weitergeben möchte.Set Locals Wert für Cocoon teilweise mit Jquery, Rails 4

Problem: Ich kann statischen Wert ohne Problem senden, aber ich möchte dynamischen Wert übergeben, der in Jquery berechnet wird.

Mein Code:

index.html.erb

<%= link_to_add_association 'Pievienot atbildi', f, :answers,render_options: {locals: { question_id: 'Holmes' }}, :class=>"btn btn-default" %> 


<script type="text/javascript"> 
      var n = $(".reg_input_question").length; 
      alert(n); 
</script> 

_answer_fields.html.erb

<%= f.radio_button :correct_one, false, :checked => false, :name=> question_id %> 
    <%= link_to_remove_association "Dzēst atbildi", f , :class=>"btn btn-default text-danger"%> 

I n Variable aus Index senden möchten .html.erb Seite zu _answers_fields teilweise. Ich kann statischen Wert "Holmes" senden, aber ich habe keine Ahnung, wie {locals: { question_id: 'Holmes' }} Wert auf etwas anderes mit Skript setzen.

Ich habe Great example gefunden, um das mit regelmäßigen Teiltönen zu tun, aber wie ich Cocoon Teilbehandlung verwende, kann ich nicht wie in diesem Beispiel tun.

Was ich versuche zu erreichen:

Ich habe 3 verschachtelte Modelle Test, Frage und Antwort. Zuerst erstelle ich Frage mit:

<%= link_to_add_association "Pievienot jautājumu", f, :questions, :class=>"btn btn-default" %> 

Wenn Frage erstellt wird, kann ich Antworten mit Code oben erstellen. Antworten besteht teilweise aus Antworttext und correct_one boolean. Ich verwende radio_button, um nur eine von neu erstellten Antworten als correct_one auszuwählen.

Problem: Wenn ich mehrere Fragen erstellen, teilen ihre Antworten den gleichen Radio_button Namen "Holmes". Das führt zu einem Problem, wenn der Benutzer die richtige Antwort für die erste Frage ausgewählt hat und dann auf die zweite Frage klickt, wenn die vorherige Auswahl aufgehoben ist.

Ich möchte wie folgt aus:

1. Question 
    <%= f.radio_button :correct_one, false, :checked => false, :name=> 1 %> 
    <%= f.radio_button :correct_one, false, :checked => false, :name=> 1 %> 

2. Question 
    <%= f.radio_button :correct_one, false, :checked => false, :name=> 2 %> 
    <%= f.radio_button :correct_one, false, :checked => false, :name=> 2 %> 

Zur Zeit habe ich wie folgt aus:

1. Question 
    <%= f.radio_button :correct_one, false, :checked => false, :name=> "Holmes" %> 
    <%= f.radio_button :correct_one, false, :checked => false, :name=> "Holmes" %> 

2. Question 
    <%= f.radio_button :correct_one, false, :checked => false, :name=> "Holmes" %> 
    <%= f.radio_button :correct_one, false, :checked => false, :name=> "Holmes" %> 

Vielen Dank im Voraus für jede Hilfe.

+0

Ich denke, Sie brauchen stattdessen eine Checkbox. Mit einem Radio-Button können Sie verschiedene Werte für dasselbe Feld angeben (und nur eines auswählen). Sie möchten angeben, ob eine Antwort korrekt ist oder nicht, also müssten Sie für jede Antwort einen Wert speichern, nein? Ich bekomme den Radio-Knopf, stellt sicher, dass Sie automatisch die anderen Werte abwählen, aber in diesem Fall wird es nicht korrekt in der Datenbank gespeichert. Ich denke, dass Sie etwas stattdessen benötigen: http://stackoverflow.com/questions/2947569/how-to-automatisch-uncheck-a-checkbox-if-another-checkbox-is-checked-thro-j- – nathanvda

Antwort

0

fand ich Weg, um dieses Problem:

in _answers_fields.html. erb

 $('input[name="Holmes"]').each(function() { 

     var id = $(this).attr('id').match(/\d+/); 

     $(this).attr('name', id); 

     }); 

Grundsätzlich dieses Skript durch alle Antwortfelder mit dem Namen „Holmes“ Schleife und ändert seinen Namen Attribut id Teil (As-ID jeden Eingangs ist ressourcenspezifisch - je Frage-ID wird an verschachtelte Ressource übergeben).

Hässlichen Ansatz, aber es funktioniert wie ich brauche.

Verwandte Themen