Anpassen von Geräteansichten in Rails

75

Ich verwende devise für die Benutzerauthentifizierung, habe aber nette Modelle für die Anmelde-, Anmelde- usw. Seiten. Ich habe den rails generate devise:views UserBefehl bereits ausgeführt und habe alle Ansichten im Ansichtsordner. Als ich jedoch die Registrierung / new.html.erb durch meine eigene new.html.erb ersetzte, ändert sich nichts und sieht auch nicht anders aus. Es ist, als hätte ich etwas getan.

Jeder weiß, was ich falsch mache oder zumindest, wie man erfolgreiche Ansichten erfolgreich anpasst

PS Ist es wichtig zu beachten, dass ich die Route von Gerät / Registrierung # neu in / Anmeldung geändert habe?

Vasseurth
quelle
Haben Sie versucht, Ihren Cache zu leeren? Neuladen? Server neu starten?
Gal
1
Ich habe es herausgefunden ... Ich kann am Ende keine Benutzer haben
Vasseurth
@Vasseurth: Um dies zu verdeutlichen, setzen Sie nicht "Benutzer" am Ende des Befehls "Rails generieren", da dies eine Ansicht mit Gültigkeitsbereich generiert, die nicht Ihren Wünschen entspricht.
Colin

Antworten:

32

Ihre Route signupoder devise/registrations#newwird die Ansicht rendern views/devise/registrations/new.html.erb. Es hört sich so an views/user/registrations/new.html.erb, als hätten Sie Änderungen an vorgenommen , was erklären würde, warum Sie die vorgenommenen Änderungen nicht sehen, da sie nicht gerendert werden.

Sie müssen entweder eine erstellen user/registrations_controller.rb, die sich von Devise::RegistrationsControllerIhrer /signup Route aus erstreckt und auf die Sie zeigen user/registrations#new, oder Sie können Ihre Änderungen einfach direkt an vornehmenviews/devise/registrations/new.html.erb

Die gleiche Idee gilt für Ihre Login ( devise/sessions) -Seiten.

Hoffe das hilft.

Kevin Tsoi
quelle
Wie werde ich mich dabei von Benutzern und Administratoren unterscheiden, wenn es keine / Benutzer / Registrierung oder / Administrator / Registrierungen gibt?
Vasseurth
3
Schienen generieren Gerät: Ansichten Benutzer hat bereits die / Benutzer / Registrierungen für Sie bereits korrigiert? Wenn Sie auch eine Administratorrolle haben, müssen Sie auch die Administratoransichten generieren (Rails generieren devise: views admin).
Kevin Tsoi
120

auf einen Blick antworten.

...anstatt

rails generate devise:views User

verwenden:

rails generate devise:views

Wenn Sie dies bereits getan haben, verschieben Sie die erstellten Ordner app/views/Userin einen neuen Ordner app/views/devise(oder benennen Sie den UserOrdner einfach in um devise, wenn dies eine Option ist).

Diese Ordner sind:

app/views/User/confirmations
app/views/User/mailer
app/views/User/passwords
app/views/User/registrations
app/views/User/sessions
app/views/User/shared
app/views/User/unlocks

Es sind keine weiteren Änderungen erforderlich.

ocodo
quelle
3
Das ist die Antwort. Sie können Geräteansichten standardmäßig nicht bearbeiten, da sie sich in ihnen befinden, bis Sie sie so generieren. Vielen Dank.
Lukas
Ich kaufe dir eine Tasse Kaffee, wenn ich dir jemals den Weg kreuze.
Thomas Ayoub
3
Wenn Sie Ansichten von einem bestimmten Controller anpassen möchten, fügen Sie die folgende -vOption hinzu:rails generate devise:views -v registrations confirmations
Chambeur
6
Dies ist die Antwort, wenn Sie nur ein Modell für die Authentifizierung haben . Wenn Sie 2 Modelle für die Authentifizierung haben, sagen Sie usersund admins, müssen Sie mit der Antwort unten von @QBDSolutions
Aswin Ramakrishnan
109

Obwohl dies eine alte Frage ist, dachte ich, ich würde sie ergänzen, falls jemand darüber stolpert. Ich bin mir nicht sicher, ob dies ein Neuzugang ist, da die Frage ursprünglich gestellt wurde, aber wenn ja, ist dies der einfachere (modernere) Ansatz.

In der Datei config/initializers/devise.rbbefindet sich der folgende Codeblock:

# ==> Scopes configuration
# Turn scoped views on. Before rendering "sessions/new", it will first check for
# "users/sessions/new". It's turned off by default because it's slower if you
# are using only default views.
# config.scoped_views = false

Durch das Kommentieren config.scoped_views = falseund Ändern des Werts in truewird überprüft, ob die benutzerdefinierte Ansicht vorhanden ist, und wenn ja, wird dies bereitgestellt. Wie es heißt, erhöht es den Aufwand für die Anwendung, aber meiner Erfahrung nach ist dies bisher minimal.

DazBaldwin
quelle
3
Vielen Dank! Ich habe versucht herauszufinden, wie ich meine "benutzerdefinierten" Ansichten aktivieren kann, bis ich auf Ihre Antwort stieß.
Xander
4
Dies sollte als Lösung markiert werden, da es das ursprüngliche Problem korrekt löst.
michaeldwp
4
Wenn Sie diese Option auf "true" setzen, entsteht kein Overhead, wenn Sie die benutzerdefinierten Ansichten tatsächlich definieren. Ich denke, Sie haben möglicherweise die Bedeutung des Kommentars in der Datei falsch interpretiert. Tatsächlich wird darauf hingewiesen, dass es standardmäßig keinen Grund gibt, benutzerdefinierte Ansichten zu aktivieren. Wenn Sie sie aktivieren und die neuen Ansichten nicht definieren, wird angezeigt, ob sie vorhanden sind. Anschließend wird auf die Standardeinstellungen zurückgegriffen, wodurch der Overhead verursacht wird. Solange Sie die benutzerdefinierten Ansichten definieren, sollte das theoretische Setzen dieser Option auf true keinen Overhead verursachen.
mkralla11
1
Dies ist die richtige Antwort Ruby Konzept ist trocken zu gehen.
Vidur Punj
1
Toll. Antworten! Ich hatte ein Modell namens "Events" und war lange Zeit ratlos, warum Rails nicht zu meinem Event-Controller weitergeleitet wurde, sondern stattdessen / Events entwickelte. scheint wie die Option, die Sie beschrieben haben, lassen Sie Rails überprüfen, ob ich zuerst einen Ereignispfad habe, bevor ich zu devise / events gehe
ChairmanMeow
25

Für alle, die noch ein Problem damit haben, liegt das Problem in der Aufforderung an rails generate devise:views User. Es sollte rails generate devise:viewszum Abrufen aktueller Ansichten von der Devise Rails Engine dienen. Dadurch werden korrekte Ansichten generiert, die mit den Standardrouten funktionieren.

Marcus W.
quelle
Wie kann ich zurückgehen? Ich habe ausgeführt, rails generate devise:views Userdass ein Ordner Usersin der Ansicht und auch ein Controller-Ordner generiert wurden users. Wenn ich den Namen geändert devisehabe, funktioniert es nicht?
Steven Aguilar
20

Nach dem Generieren Ihrer benutzerdefinierten Ansichten, z

rails generate devise:views User

Schalte ein scoped_views inconfig/initializer/devise.rb

view config.scoped_views = true

Und du bist fertig.

Saqib R.
quelle
11

Verwenden von rails g devise:views User können Sie anpassen, wenn Sie mehr als eine Rolle haben.

Der richtige Weg, dies zu tun, ist in dein devise.rbIn zu gehenconfig/initializer/ Ordner zu gehen

und auskommentieren und einstellen config.scoped_views = true.

Jetzt können Sie die Ansicht erb-Dateien problemlos bearbeiten

Richard Lau
quelle
1
Dies sollte die Antwort sein
Ayman Salah
11

Ich hatte das gleiche Problem, bis ich zurückging und die Dokumentation des Geräts las :)

Danach rails generate devise:viewsstellen Sie sicher, dass Sie in initializers/devise.rbund setzen config.scoped_views = true. Dies wird in der Gerätedokumentation unter https://github.com/plataformatec/devise sowie in den devise.rbKommentaren erläutert .

Nachdem ich dies getan hatte, tauchten meine eigenen Ansichten views/usersanstelle der im Edelstein auf.

guero64
quelle
2

Zum späteren Nachschlagen können Sie den Ordner einfach von devise => user umbenennen und umgekehrt. Rails finden eine Route.


quelle
1
Ich glaube, dass dies gleichbedeutend ist, rails g devise:views Useraußer dass der neue Ordner neben dem geplanten Ordner hinzugefügt wird. Ich glaube nicht, dass es eine sehr gute Angewohnheit ist, Schienen zu erlauben, eine Route zu finden
DazBaldwin