2016-04-04 21 views
0

Ich versuche verschachtelte Formen wie hier erwähnt zu tun. http://guides.rubyonrails.org/form_helpers.html#nested-formsverschachtelte Formulare Schienen Feld nicht aktualisiert

Das Ziel ist wie folgt: Ich habe mehrere Colli mit einem Kontrollkästchen, das überprüft werden kann. Die Kolli-Liste kann gelöscht oder geändert werden, aber die Überprüfungen und ihre Informationen müssen bleiben.

Modell

class Colli < ActiveRecord::Base 
    has_one :check, foreign_key: "subcontainerid", primary_key: "colliid" 
    accepts_nested_attributes_for :check, allow_destroy: true 
end 

class Check < ActiveRecord::Base 
    belongs_to :colli 
end 

ein Scheck So hat jeder Colli. Das Collid aus der Colli-Tabelle erstellte eine Verknüpfung mit der Prüftabelle, die die Subcontainer-ID verwendet.

-Controller

Im Colli Controller weiße Liste ich die check_attributes.

def colli_params 
    params.require(:colli).permit(:colliid, :collinaam, check_attributes: [:id, :checked]) 
end 

Formular

sieht meine Form so.

<%= form_for(@colli) do |f| %> 
    <% if @colli.errors.any? %> 
    <div id="error_explanation"> 
     <h2><%= pluralize(@colli.errors.count, "error") %> prohibited this colli from being saved:</h2> 

     <ul> 
     <% @colli.errors.full_messages.each do |message| %> 
     <li><%= message %></li> 
     <% end %> 
     </ul> 
    </div> 
    <% end %> 

    <%= f.fields_for :checks do |checks_f| %> 
    <p>check start</p> 
    <div class="field"> 
    <%= checks_f.label :checked %><br> 
    <%= checks_f.check_box :checked %> 
    </div> 
    <% end %> 

    <div class="field"> 
    <%= f.label :colliid %><br> 
    <%= f.text_field :colliid %> 
    </div> 

    <div class="field"> 
    <%= f.label :collinaam %><br> 
    <%= f.text_field :collinaam %> 
    </div> 

    <div class="actions"> 
    <%= f.submit %> 
    </div> 

<% end %> 

Wenn ich form_for: check Ich kann die Kontrollkästchen nicht sehen. Wenn ich form_for: checks sehe, sehe ich ein Kontrollkästchen, aber es funktioniert nicht. Beim Klicken auf abschicken sehe ich folgenden Fehler:

undefined method `checked' for nil:NilClass 

<p> 
    <strong>Checked:</strong> 
    <%= @colli.check.checked %> 
</p><p> 
    <strong>Collinaam:</strong> 
    <%= @colli.collinaam %> 

Das bedeutet, es wurde nicht gespeichert. Weiß jemand, wie man das repariert?

Antwort

2

Versuchen, diese zu Ihrem form-

<%= f.fields_for :checks, @colli.check.build do |checks_f| %> 
<p>check start</p> 
<div class="field"> 
    <%= checks_f.label :checked %><br> 
    <%= checks_f.check_box :checked %> 
</div> 
<% end %> 
+0

Das ist nicht 'funktioniert nicht definierte Methode bauen für nil: NilClass' aber wenn ich ein' @ colli.build_check' in der Bearbeitungsaktion von der Steuerung tun es tut Arbeit. – Christoph

Verwandte Themen