Ich versuche geschachtelte Modelle zu implementieren, hier ist der route-Dateieintrag:
%Vor%Nachfolgend ist das Snippet für den Projektcontroller:
%Vor%und die Formularansicht des Projekts:
%Vor%Wenn ich jetzt die Anzahl der Instanzenanzahl ändere, muss ich die Instanzfelder so oft unter dem obigen Formular anzeigen. Hier ist der Teilcode dafür:
%Vor% Grundsätzlich muss ich <%= render 'instances/form', form: f %>
aus der JavaScript-Datei des Projekts aufrufen. Es sollte funktionieren wie Link mit remote: true
Option. Aber in diesem Fall gibt es keine Verknüpfung, aber beim Änderungsereignis muss das Formular angezeigt werden. Wie soll ich das umsetzen?
Sie müssen den serverseitigen Code einmal aufrufen, da instances/form
Code enthält, der nur serverseitig gerendert werden kann.
Zuerst müssen Sie einen Ajax-Aufruf ausführen (zB instance_new_path) und dann müssen Sie das Formular in dieser Ansicht rendern ( instance_new.js.erb
).
Beispiel .js.erb
%Vor% Standard ist ein partieller Aufruf von app/views/instances/_instance_fields.html.erb
. Dann können Sie es einfach in Ihr Formular laden und es ausblenden.
Cover _instance_fields
partially mit einer Art Container, wie <fieldset class='instance_fields' style='display:none'>
. Außerdem sollten Sie dort kein Formularobjekt verwenden, gehen Sie einfach mit den Eingaben text_field_tag / checkbox_tag dahin. Wenn Sie dann weitere Instanzen hinzufügen müssen, kopieren Sie diese ausgeblendeten Snippets einfach so oft wie nötig und richten Sie die richtigen Namen für die Eingaben ein (um für accepts_nested_attributes_for
zu übernehmen).
Ping mich, um mehr Details und Hilfe zur Verfügung zu stellen. Dies ist ein Ansatz, der im realen Projekt verwendet wurde. Fire Ajax Call jedes Mal, wenn Sie mehr Instanzen hinzufügen müssen, ist überhaupt nicht optimiert.
Erstellen Sie eine .js
-Datei, und laden Sie sie in projects/new.html.erb
, was immer dann ausgeführt wird, wenn eine Änderung in select
-Wert stattfindet und eine post
-Anforderung an instances/new
-Controller erstellt, die instances/new.js.erb
alle rendert Zeit es geschlagen wird.
Instanzen / new.js.erb
%Vor%laden.js
%Vor% Obwohl Sie nicht so verwenden sollten. Lade stattdessen ein instance
-Feld bereits in deinem Code, behalte es versteckt, da du instance
bereits in deinem project
verfügbar hast. Außerdem benötigen Sie nicht jedes Mal neue Daten, wenn Sie es rendern. Einfach bei der Auswahl von Wert 1 können Sie show
Ihr instance
Feld und wenn der Wert > 1
ist, können Sie clone
Verwenden Sie einfach gem Ссылка für die verschachtelten Formulare
Tags und Links javascript ruby-on-rails simple-form