2009-08-18 5 views
0

Neu bei Schienen und versuchen, eine Eins-zu-viele-Beziehung in Gang zu bringen. Ich habe es in Model und Controller arbeiten, aber ich habe Probleme, es in den Ansichten zu starten.Ruby on Rails: Eine zu viele Beziehungsansicht

class Project < ActiveRecord::Base 
    has_many :non_labor_expenses 
end 

class NonLaborExpense < ActiveRecord::Base 
    belongs_to :project 
end 

ich manuell erstellt einige Einträge in der der non_labor_expense Tabelle durch die @non_labor_expenses in der Steuerung (Bearbeitungsaktion) geladen und kann wie so die vorhandenen Daten in der Projektansicht ziehen:

<% unless @non_labor_expenses.nil? %> 
    <% count = 1 %> 
    <% for expense in @non_labor_expenses %> 
    <li> 
     <div class="label"><%= f.label :expense , "Expense" + count.to_s %></div> 
     <%= '$' + expense.amount.to_s + ' - ' + expense.description.to_s %> 

    </li> 
    <% count = count +1 %> 
    <% end %> 

Was ich habe Schwierigkeiten, ist das Hinzufügen eines neuen non_labor_expense Eintrags zum Projekt. Ich sollte in der Lage sein, es im Backend zu handhaben, aber ich kann nicht einmal das Feld in der Form erscheinen lassen.

Hier, wo ich jetzt bin:

<li class="editable"> 
    <div class="label"><%= f.label :non_labor_expenses %></div> 
    <%= f.text_field :non_labor_expenses %> 
</li> 

Ich weiß, dass meine obigen Code nichts so aussieht, sondern im Idealfall die Formularfelder wäre so etwas wie:

Expense Amount [text input] 
Expense Description [text input] 

Meine volle Form Code finden Sie hier: http://pastebin.com/m2b280b0f

+0

Können Sie den gesamten Formularcode posten? –

+0

FULL FORM CODE: http://pastebin.com/m2b280b0f – easement

Antwort

2

Angenommen, Sie können nur einen pro Formular hinzufügen (im Gegensatz zu JS, um [n] neue Arbeitskosten hinzuzufügen), erstellen Sie einfach eine leere Instanzvariable im Controller.

@new_non_labor_expense = NonLaborExpense.new 

In der Form, bauen sie mit aus:

<%= f.text_field :new_non_labor_expense, :amount %> 

oder was auch immer dem entsprechenden var und Feldtyp Mitglied sind.

In der Steuerung erhalten Sie einen Parameter namens "new_non_labor_expense" und können darauf zugreifen, validieren, zuordnen und speichern. Oder, wenn einer dieser Schritte fehlerhaft ist, können Sie zurückspringen und den Benutzer benachrichtigen.

Wenn Sie mehr hinzufügen müssen, erstellen Sie einfach ein Array von ihnen, so dass Sie ein Array von NLEs übergeben. Hoffnung, die Sinn macht.

0

non_labor_expenses ist kein Textfeld, das ist wahrscheinlich Ihr größtes Problem.

Eine bessere Möglichkeit, dies zu tun, könnte sein, ein neues non_labor_expense zu erstellen, und in seiner Erstellung ein Dropdown-Auswahlfeld, um die ID (oder den Namen, über die ID) des Projekts auszuwählen.

+0

Ich weiß, es ist kein Textfeld, aber ich habe keine Ahnung, was zu verwenden ist. Ich stimme zu, aber die Website ist so konzipiert, dass die Nicht-Arbeitsausgaben auf der Bearbeitungsseite des Projekts hinzugefügt werden müssen. – easement

0

Ich denke, was Sie brauchen, sind verschachtelte Formulare. Here ist ein einfaches Beispiel, wie man es mit einer zu vielen Beziehung macht. Es funktioniert seit Rails 2.3.2

+0

Der Link ist tot – mack