2016-04-24 12 views
0

Ich versuche, eine Rails-App zu erstellen, die Temperaturen für einen Garten verwaltet. Ich habe meine Controller und Modelle entsprechend eingerichtet, um Ressourcen für Grow - Tray - Plant zu haben. Grow hat viele Schalen Tray hat viele PflanzenVerschachtelte Ressourcen in Rails 4

Ich bin in der Lage, verschachtelte Schalen in jedem wachsen zu erstellen. Aber ich kann keine Pflanzen in einem bestimmten Fach erstellen.

Die github repo

Im den folgenden Fehler erhalten: nicht definierte Methode `Tablett‘ Das für meine Anlage _form ist

<%= form_for([@grow, @grow.tray.plants.build]) do |f| %> 
<div class="field"> 
    <%= f.label :title %><br> 
    <%= f.text_field :title %> 
    </div> 
    <div class="field"> 
    <%= f.label :description %><br> 
    <%= f.text_area :description %> 
    </div> 
    <div class="field"> 
    <%= f.label :tray_id %><br> 
    <%= f.text_field :tray_id %> 
    </div> 
    <div class="actions"> 
    <%= f.submit %> 
    </div> 
<% end %> 

Die Routen aussehen als solche:

resources :grows do 
    resources :trays do 
     resources :plants 
    end 
end 

Die Formular für den Aufbau der Schale sieht so aus und es funktioniert:

<%= form_for([@grow, @grow.trays.build]) do |f| %> 

    <div class="field"> 
    <%= f.label :title %><br> 
    <%= f.text_field :title %> 
    </div> 
    <div class="field"> 
    <%= f.label :description %><br> 
    <%= f.text_area :description %> 
    </div> 
    <div class="field"> 
    <%= f.label :grow_id %><br> 
    <%= f.text_field :grow_id %> 
    </div> 
    <div class="actions"> 
    <%= f.submit %> 
    </div> 
<% end %> 

Ist das überhaupt der richtige Ansatz?

+0

nach Ihren Code, sollten Sie '@ verwenden grow.trays ...' statt '@ grow.tray' – Ilya

+0

Ive versucht, das so gut und ich bekomme dies für einen Fehler nicht definierte Methode' Pflanzen und wenn i Pflanze statt Pflanzen verwenden, bekomme den gleichen Fehler – mGarsteck

Antwort

0

Wenn Wachsen has_many Schalen, dann @grow.tray wäre undefined (beachten Sie die Einzahl).

Vielleicht sollten Sie das entsprechende Fach im Controller zuweisen, so kann sie in geeigneter Weise in der Ansicht referenziert werden:

@tray = @grow.trays.find(...) 

ich auch Verschachtelung Routen mehr als zwei Ebenen vermieden würde empfehlen. Formulare wie diese sind mit Mehrfachverschachtelung schwieriger zu verwalten.

+0

Ok toll, was ist eine bessere Methode, um dies dann zu erreichen? – mGarsteck

+0

Außerdem bekomme ich immer noch den gleichen Fehler. Ich habe Ihren Code zur set_tray-Aktion im plants_controller hinzugefügt – mGarsteck

Verwandte Themen