Wie kann ich Formularfelder für eine has_many :through
Assoziation erzeugen, die zusätzliche Attribute hat?
Die Beziehung has_many :through
hat eine zusätzliche Spalte namens weight
.
Hier ist die Migrationsdatei für die Join-Tabelle:
%Vor%Die Modelle sehen so aus:
%Vor% Aus Gründen der Einfachheit haben Widget und Benutzer nur ein eigenes Feld namens name
, ergo User.first.name
und Widget.first.name
Fragen:
Wie würde ich eine Dropdown-Auswahl für Widgets mit dem entsprechenden Gewicht an das Formular zum Erstellen / Bearbeiten von Benutzern anhängen?
Wie kann ich dynamisch zusätzliche Widget-Formulare zu Benutzern oder Benutzerformularen zu Widgets hinzufügen, um diese Beziehungen einfach hinzuzufügen oder zu entfernen? Das nested_form_for
Juwel scheint die perfekte Lösung zu sein, aber ich konnte es nicht zum Laufen bringen.
Gibt es außer den Modellen und den Formteil-Teilbereichen irgendwelche Änderungen, die an meinem Controller vorgenommen werden müssen?
Schneller Hinweis .. Ich bin nicht daran interessiert, neue Widgets im Benutzerformular oder neue Benutzer im Widget-Formular zu erstellen. Ich möchte nur die Möglichkeit haben, aus vorhandenen Objekten auszuwählen.
Ich verwende Rails 3.1 und simple_form 2.0.0dev zum Generieren meiner Formulare.
Ich werde Ihr Problem mit cocoon lösen, einem Juwel, das ich zur Bearbeitung von verschachtelten Formularen erstellt habe. Ich habe auch ein Beispielprojekt , um Beispiele für verschiedene Arten von Beziehungen zu zeigen.
Ihr ist nicht buchstäblich enthalten, aber es ist nicht so schwer daraus abzuleiten. In Ihrem Modell sollten Sie schreiben:
%Vor% Dann müssen Sie eine Teilansicht erstellen, die Ihre verknüpfte UserWidgets
auflistet. Platzieren Sie dieses Partial in einer Datei namens users/_user_widget_fields.html.haml
:
In Ihrem users/edit.html.haml
können Sie dann schreiben:
Hoffe, das hilft.
begründe deine Frage. Ich habe eine einfache App gemacht. Quelle ist hier: Ссылка Ich habe es auf Heroku eingesetzt, Sie können Seite öffnen: Ссылка
Antworten
Sie wollen Benutzerformular kann Widget mit Gewicht auswählen, muss mehr Arbeit zu tun.dropdown Auswahl kann Ihre Anforderung nicht erfüllen.
Ich mische "nested_form" in einem "bootstrap-rails" -Plugin, Sie können die nested_fields einfacher hinzufügen
In meinem Beispiel müssen Sie eine Aktion hinzufügen, wählen Sie aus, und machen Sie WidgetsController # create kann responsed_with: js
Der Code basiert simple_form, Sie können es versuchen.
Vielen Dank für den Kokonzeiger nathanvda. Ich habe mir über einige Probleme gekratzt, die ich hatte, als ich versuchte, dies unter Rails 4.0.0-rc1 zu implementieren, und ich dachte, ich würde meine Ergebnisse teilen, nur für den Fall, dass jemand die gleichen Probleme bei diesem Versuch hat.
Unter Verwendung des obigen Codes als Beispiel habe ich user_id und widget_id zu den erlaubten Parametern hinzugefügt, wie sie in der Verbindungstabelle user_widgets gespeichert sind. In Rails 3 musst du sie zu attr_accesible im Benutzermodell hinzufügen, aber in Rails 4 musst du sie zu den erlaubten Parametern im Controller des Hauptmodells hinzufügen, das du für die Verschachtelung verwendest, also hier wäre der users_controller:
%Vor%Wenn Sie nur dies tun, haben Sie mehrere Probleme:
Um diese Probleme zu beheben, müssen Sie außerdem: id und: _destroy zur Liste der erlaubten Attribute hinzufügen:
%Vor%danach funktioniert es einwandfrei.
Jürgen
PS: Im Moment musst du das Git-Repository in deiner Gemfile verwenden, um Kokon unter Schienen 4 zu verwenden, bis ein mit Rails 4 kompatibles Juwel veröffentlicht wird. Danke für die Email nathanvda auf meinem Fehlerbericht !!
Tags und Links ruby ruby-on-rails simple-form nested-forms has-many-through