Das Hauptziel: Erlaube Plugins, Edelsteine, vordefinierten Formularen zusätzliche Formularfelder hinzuzufügen.
Zum Beispiel hat die Anwendung ein Anmeldeformular für Geräte:
%pr_e%
Marketingabteilung möchte eine Kampagne für die nächsten 2 Tage starten (zB: Registrieren Sie sich mit einem Aktionscode und erhalten Sie X Bonuspunkte). Daher müssen wir allen unseren Registrierungsformularen ein zusätzliches Feld promo code
hinzufügen.
Gibt es eine Möglichkeit, ein zusätzliches Feld zum Formular von meinem Rails-Plugin / Railtie hinzuzufügen, und definieren Sie eine on_submit
Callback-Methode (um Maßnahmen für meine zusätzlichen Felddaten zu ergreifen)?
Vorteile:
Ich habe mir ActionView-Code angeschaut, und es scheint, dass es keine eingebaute Methode dafür gibt. Was sind deine Gedanken?
HINWEIS: Drupal form_alter
Haken sind ein großartiges Beispiel.
Zunächst ist Ihre Idee, diesen Code in einem Juwel / Railtie / Motor zu isolieren, ausgezeichnet. Ich denke, deine beste Wette ist, Affen die form_for-Methode zu patchen und in das Extra-Feld zu stecken. In Bezug auf den Trigger bei der Einreichung, wenn Sie sich auf Rails 3.1 befinden und die Asset-Pipeline verwenden, können Sie den Edelstein auch Javascript geben lassen, obwohl dies eine kleine Änderung in Ihrem application.js
erfordern würde, um die js-Datei des Edelsteins zu benötigen. z.B require 'promo/application.js
, wenn der Edelstein "Promo" genannt wurde.
Sehen Sie sich die Dokumentation für an Angepasster Formular-Generator
Hier ist eine ungefähre Idee, wie das funktionieren könnte, obwohl ich diesen Code nicht ausprobiert habe. Ich würde dies in die promo.rb-Datei, die Unterklassen Railtie
oder Engine
.
Hinunter die Straße, besonders. Wenn Ihre Marketingabteilung möglicherweise mehr Kampagnen ausführt, möchten Sie vielleicht sogar die Formulare der App ändern, um auf einen bestimmten Builder zu verweisen, den Sie von einem Juwel überschreiben können, ohne dass der Affe hier patchen muss.
Idee in Schritten:
1) Definieren Sie ein Modell wie AdditionalField (ID, Feldname, Feldtyp, Standardwert, is_required)
2) dann erstellen Sie eine Funktion wie:
%Vor%3) dann können Sie über die gefundenen AdditionalFields iterieren und die richtigen Feldtypen nach Bedarf erstellen.
Ich verwendete diese Lösung für eine Vergleichswebsite, wo sie die Fragebögen für jeden unterschiedlichen Vergleichstyp konfigurieren mussten.
Hier ist der Rendercode, den ich verwendet habe. Sie müssen ihn entsprechend Ihrer Situation anpassen. Beziehungen sind:
%Vor%FragenHelper
%Vor%Controller
%Vor%In diesem Fall sollte ein neues Juwel erstellt werden, das -
Wir machen keine Änderungen in der Hauptanwendung, daher sind wir sicher.
Tags und Links ruby-on-rails-3 ruby-on-rails ruby-on-rails-plugins