2009-05-21 11 views
19

http://weblog.rubyonrails.org/2009/1/26/nested-model-forms, wie mehrere Modelle in einer Schiene Form

Dieser Beitrag geholfen zu lernen, wie zu handhaben mehrere Modelle in einer Schiene Form zu handhaben. Es funktioniert, solange die Modelle verschachtelt sind. Was ist, wenn sie es nicht sind? Nehmen wir an, ich habe ein Formular, in dem der Benutzer persönliche Daten, Adressdetails und eine Reihe von Kästchen mit ihren Interessen angibt. Es gibt mindestens 3 Tabellen in dieser einen Form, was ist der beste Weg, um dies zu bewältigen, ohne 3 verschiedene Speichern Schaltflächen?

Antwort

25

zwei Optionen:

Zunächst ist ActivePresenter, die gut für das funktioniert.

Zweitens ist nur fields_for zu verwenden:

<%= form_for @user do |f| %> 

    <%=f.label :name %> 
    <%=f.text_field :name %> 

    <%= fields_for @address do |fa| %> 
     <%=fa.label :city %> 
     <%=fa.text_field :city %> 
    <% end %> 

<% end %> 

Dann in der Steuerung, die Datensätze speichern.

@user = User.new(params[:user]) 
@address = Address.new(params[:address]) 

ActivePresenter funktioniert so gut, obwohl.

Auch eine railsforum post über Google gefunden, die gut funktionieren würde.

+0

Zweite Option sehr einfach scheint (ich habe es sollte erraten) ich auf diesem Tutorial kam, aber es ist für verschachtelte Modelle obwohl. Eine Frage: Was wäre, wenn ich mehrere Adressen hätte? – user85748

+0

Ich empfehle wirklich, dies zu vermeiden, wenn Sie können. Es ist nicht sehr angenehm für den Benutzer überhaupt. Wenn Sie einfach müssen, dann werfen Sie einen Blick zuerst: http://blog.new-bamboo.co.uk/2007/8/31/presenters-conductors-on-rails Sie können auch Formular-Arrays verwenden , aber das kann ich nicht in einem Kommentar erklären, und es ist abstrakt. –

+0

Vermeiden Sie das Hinzufügen mehrerer Adressen, die Sie meinen? das war nur ein Beispiel, ich werde es nicht tun. aber es kann Fälle geben, in denen es benötigt wird. wenn zum Beispiel der Benutzer seine Interessen eingibt (nur als Beispiel, kann mir nichts Besseres vorstellen), je ein pro Textfeld. – user85748

Verwandte Themen