Ich habe dem Anmeldeformular ein Feld hinzugefügt, das auf einem anderen Modell basiert. Weitere Informationen finden Sie unter Wie verwende ich verschachtelte Attribute mit dem Gerätemodell für die wichtigsten Details. Dieser Teil funktioniert gut.
Das Problem ist jetzt, wenn ich speichere, dass die Erstellungsaktion des Registrierungscontrollers fehlschlägt, der von devise mit einem Activerecord::UnknownAttributeError
in diesem Feld (Unternehmen) bereitgestellten Feld geliefert wird .
Ich gehe davon aus, dass ich den Registrierungs-Controller überschreiben muss, oder gibt es eine bessere / einfachere Möglichkeit, dies zu erreichen?
ruby-on-rails
devise
Craig McGuff
quelle
quelle
Antworten:
Übergeben Sie in Ihrem Formular andere Attribute über eine Massenzuweisung, die nicht zu Ihrem Benutzermodell gehört, oder eines der verschachtelten Modelle?
Wenn ja, glaube ich, dass der ActiveRecord :: UnknownAttributeError in dieser Instanz ausgelöst wird.
Ansonsten können Sie einfach Ihren eigenen Controller erstellen, indem Sie Folgendes generieren:
Und dann sagen Sie devise, dass dieser Controller anstelle des Standardcontrollers verwendet werden soll mit:
quelle
rails generate devise:views
und in Rails 2 (glaube ich) ist es:script/generate devise:views
paths.app.views << "app/views/devise"
Ihre hinzufügenconfig/application.rb
.Eine bessere und besser organisierte Methode zum Überschreiben von Devise-Controllern und -Ansichten mithilfe von Namespaces:
Erstellen Sie die folgenden Ordner:
Fügen Sie alle Controller, die Sie überschreiben möchten, in app / controller / my_devise ein und fügen Sie den
MyDevise
Namen der Controller-Klassen einen Namespace hinzu .Registrations
Beispiel:Ändern Sie Ihre Routen entsprechend:
Kopieren Sie alle erforderlichen Ansichten
app/views/my_devise
aus dem Devise Gem-Ordner oder verwenden Sierails generate devise:views
, löschen Sie die Ansichten, die Sie nicht überschreiben, und benennen Sie dendevise
Ordner in ummy_devise
.Auf diese Weise haben Sie alles ordentlich in zwei Ordnern organisiert.
quelle
create
von mir überschriebene Methode von Devise eingefügt werden soll. Mein von einem Gerüst erstellter Controller, den ich geändert habe, funktioniert hervorragend, aber wie funktioniert er mit demresource
Geschäft von Devise ?MyDevise::RegistrationsController < Devise::RegistrationsController
erzeugt einen zirkulären Abhängigkeitsfehler. Mache ich etwas falsch?Ich glaube, es gibt eine bessere Lösung, als den RegistrationsController neu zu schreiben. Ich habe genau das Gleiche getan (ich habe nur Organisation statt Firma).
Wenn Sie Ihr verschachteltes Formular auf Modell- und Ansichtsebene richtig einstellen, funktioniert alles wie ein Zauber.
Mein Benutzermodell:
Mein Organisationsmodell:
Meine Ansicht: 'devise / registrations / new.html.erb'
quelle
resource
in der Ansicht anstatt auf eine Klasseninstanzvariable zugreifen@resource
?Sie können Ansichten und Controller für die Anpassung von Geräten generieren.
Verwenden
und
Es werden bestimmte Controller und Ansichten von gem in Ihre Anwendung kopiert.
Weisen Sie den Router als Nächstes an, diesen Controller zu verwenden:
quelle
Sehr einfache Methoden Gehen Sie einfach zum Terminal und geben Sie den folgenden Typ ein
Weiter, um benutzerdefinierte Ansichten zu verwenden
jetzt in Ihrer route.rb Datei
Sie können auch andere Controller hinzufügen. Auf diese Weise können Controller im Benutzerordner und Ansichten im Benutzerordner verwendet werden.
Jetzt können Sie Ihre Ansichten nach Ihren Wünschen anpassen und Ihre Logik den Controllern im Ordner "Controller / Benutzer" hinzufügen. Genießen !
quelle