Architektur für verschiedene Benutzertypen und Kontoerstellung Formen
-
25-09-2019 - |
Frage
Ich bin mit Rails 3 und Devise.
kann ich zwei Arten von Benutzern haben Ich rufe ‚admin‘ und ‚Client‘, gespeichert sowohl in der Tabelle Benutzer, differenziert nach dem Wert des boolean ‚admin‘ Spalte.
Ein 'admin' kann zwei Arten erstellt werden:
1) Bei der Erstellung eines neuen Kontos - in diesem Fall sind wir auch ein zugehöriges ‚Geschäft‘ Datensatz
erstellen2) Innerhalb eines bestehenden Kontos (so ein ‚Geschäft‘ können mehrere ‚admins‘ haben) - im Fall wollen wir es mit einem bestehenden Geschäftsunter
assoziierenEin 'Kunde' kann 1 Art und Weise erstellt werden:
1) von einer Form trennen als das verwendet, um ein 'admin' erstellen oben
In allen 3 Fällen eine andere Form verwendet werden. Und nach Vorlage sie alle haben unterschiedliche Anforderungen:
- Ich möchte verschiedene E-Mails an jeden senden.
- Im ersten ‚admin‘ Fall oben ich überprüfen müssen, ob die angeforderte Unternehmens-URL eindeutig zuzuordnen sind, im zweiten Fall habe ich nicht. Und in dem Client-Fall weiß ich nicht.
- In der ersten ‚admin‘ Fall möchte ich einige Standard-Datenbankeinträge nach Abschluss eines Kontos schaffen, aber nicht im zweiten Fall.
- Wenn ein ‚Kunde‘ Konto erstellt wird ich einige andere Aktionen spezifisch für diesen Kontotyp ausgeführt werden soll.
Sollte ich die gleiche Steuerung für die verschiedenen Benutzertypen, oder sie trennen? Wenn sie gleich sein sollten, wie weiß es, was Art von Benutzer sollte es schaffen?
Was ist mit den Modellen?
Alle Gedanken, wie man Architekten das?
Vielen Dank.
Lösung
Meine erste Vermutung wäre, zwei Unterklassen zu erstellen, die von User
genannt Admin
und Client
. Ein bisschen wie folgt aus:
class User < ActiveRecord::Base
end
class Admin < User
devise :database_authenticatable, :etc
after_create :create_business
validates_uniqueness_of :business_url
# etc
end
class Client < User
devise :database_authenticatable, :etc
# etc
end
Als Nächstes können Sie verschiedene Formen in config/routes.rb
hinzufügen:
YourApp::Application.routes.draw do
# for the cases that someone can create their own user
devise_for :clients
devise_for :admins
# for creating it when logged in as admin
namespace :backend do
resources :admins
end
end
Achten Sie darauf, in Rails auf STI zu lesen, und die Dokumentation der Devise lesen.
Andere Tipps
Sie können diese mit verschiedenen Aktionen einen Controller verwenden und Ihre Formulare auf diese Aktionen richten:
form_tag(:controller => "people", :action => "search", :method => "get")