Auf der ersten Seite meiner Songtextseite für Rap-Texte gibt es einen Ort, an dem Nutzer versuchen können, eine herausfordernde Zeile zu erklären:
alt text http://dl.dropbox.com/u/2792776/screenshots /2010-02-06_1620.png
Hier ist der Teil, den ich benutze, um dies zu erzeugen:
%Vor% Es ist jedoch problematisch, mehrere davon auf einer einzelnen Seite zu platzieren, da Rails jedem Formular automatisch eine ID von new_feedback
und jedem Feld eine ID wie feedback_body
(führt zu Namenskollisionen) gibt
Offensichtlich könnte ich dem Formular und all seinen Feldern etwas wie :id => ''
hinzufügen, aber das scheint sich ein wenig zu wiederholen. Was ist der beste Weg, dies zu tun?
Wenn Sie Ihre Eingabenamen oder Ihre Modellstruktur nicht ändern möchten, können Sie die Option id
verwenden, um Ihre Formular-ID eindeutig zu machen und die namespace
-Option, um Ihre Eingabe-IDs eindeutig zu machen:
Auf diese Weise ist unsere Formular-ID einzigartig, d. h. annotation_2_feedback
, und dies fügt auch ein Präfix hinzu, z. annotation_2_
, für jede Eingabe, die durch f
erstellt wurde.
Haben Sie geschachtelte_Attribute für Schienenmodelle in Erwägung gezogen? Anstatt mehrere new
-Feedback-Formulare zu verwenden, in denen jedes an eine Annotation gebunden ist, könnten Sie mehrere edit
Annotationsformulare haben, wobei jede Annotation Felder für ein neues Feedback enthält. Die IDs der generierten Formulare würden die Annotations-ID enthalten, beispielsweise edit_annotation_16
.
Das Anmerkungsmodell würde eine Beziehung zu seinen Rückmeldungen haben und auch verschachtelte Attribute für sie akzeptieren.
%Vor%Sie können dann beliebig viele Formulare hinzufügen, eines für jede Annotation. Zum Beispiel habe ich Folgendes versucht:
%Vor%Und der schnelle und schmutzige Controller für die obige Bearbeitungsansicht:
%Vor%Ich hatte das gleiche Problem auf einer Website, an der ich gerade arbeite, und bin mit der Lösung gegangen, die Sie am Ende erwähnt haben. Es wiederholt sich nicht, wenn Sie die ID programmgesteuert generieren und das gesamte Formular in eine partielle Form bringen. Zum Beispiel habe ich auf meiner Seite mehrere "Einträge" pro Seite, von denen jede zwei Abstimmungsformen hat, eins zum Wählen und eins zum Abstimmen. Die Datensatz-ID für jeden Eintrag wird an die DOM-ID seiner Abstimmungsformulare angehängt, um sie so eindeutig zu machen (zeigt nur die Schaltfläche zum Abstimmen nach oben, die Abstimmungsschaltfläche ist ähnlich):
%Vor%Ich hatte auch das gleiche Problem, wollte aber eine erweiterbare Lösung, als die ID zu jedem Feld hinzuzufügen. Da wir bereits das form_for ... | f | Notation ist der Trick, den Namen des Modells zu ändern, und Sie erhalten ein neues HTML-ID-Präfix.
Verwenden Sie eine Variante dieser Methode: Ссылка (Ich habe das & amp; block Zeug entfernt)
Ich erstelle ein neues Modell, das eine exakte Kopie des Modells ist, für das ich ein zweites Formular auf derselben Seite haben möchte. Verwenden Sie dann dieses neue Modell, um das neue Formular zu rendern.
Wenn das erste Formular
verwendet %Vor%dann
%Vor%Ihr ID-Präfix ist 'address_new_' anstelle von 'address_' für die zweite Form desselben Modells. Wenn Sie die Formularparameter lesen, können Sie ein Adressmodell erstellen, in das die Werte eingefügt werden.
Für diejenigen, die hier stolpern und nach der Lösung für die Rails 3.2 App suchen, sehen Sie sich stattdessen diese Frage an:
Tags und Links ruby ruby-on-rails forms