2016-06-30 11 views
0

Ich habe eine HABTM-Beziehung zwischen Lernzielen und Aufgaben. Ich konnte Checkboxen über http://railscasts.com/episodes/17-habtm-checkboxes implementieren. Ich stehe jedoch auf ein Problem, wenn alle Kontrollkästchen deaktiviert sind. Siehe blasenSchienen 4: HABTM Checkbox-Ausgabe - kein Fehler

Form:

<% for task in Task.all %> 
<%= check_box_tag "tlo[task_ids][], task.id, @tlo.tasks.include?(task) %> 
<%= task.name%> 
<%end%> 

TLO Controller:

def update 
    params[:tlo][task_ids] ||= [] 
    respond_to do |format| 
     if(@tlo.update) 
     format.html {redirect_to @tlo} 
     end 
     end 
    end 

Ja, task_ids: [] in meinem erlaubt params. Wenn man in das Protokoll schaut sagt es undefined method [] for nil:nilClass. Einige Ressourcen sagen, weil auf einem Formular mit nur Kontrollkästchen mit keiner ausgewählt nichts einreichen? Hat jemand Vorschläge für eine Problemumgehung?

+0

Es scheint (aus dem Fehler), dass 'params [: tlo]' ist Null. Kannst du uns das ganze Formular zeigen? Was ist der Wert von 'Params'? Du verpasst ein "im Formular-Code, ich bin mir sicher, das ist nur hier in der Frage. – Leito

Antwort

0

Wenn ein Kontrollkästchen deaktiviert ist, wird der Parameter nicht mit dem übermittelten Formular gesendet. Wenn alle Kontrollkästchen eines bestimmten Namens nicht markiert sind, ist der relevante Parameter nicht in der Anfrage enthalten. Dies ist der Grund, warum Sie nil bekommen, wenn Sie versuchen, darauf zuzugreifen.

Um den Parameter mit der Anfrage zu behalten, benötigen Sie ein verstecktes Feld mit einem leeren Wert. Legen Sie es vor alle Kontrollkästchen in Ihrem Formular.

<%= hidden_field_tag "tlo[task_ids][]", '' %> 
+0

OMG! Du bist Genie! Ich habe 2 Tage auf dieses Problem! –