Ich lerne RoR aus vielen Jahren C# und MSSQL.Ruby On Rails Benutzermodell für mehrere Typen
Ich habe ein Projekt ausgewählt, um eine Website für meinen Bruder zu erstellen, der ein Mietwohnungsverwalter ist. Ich dachte mir, das sollte ziemlich einfach sein, da die Models geradlinig sein sollten, aber ich denke, dass ich vielleicht über alles nachdenke, oder dass ich Schwierigkeiten habe, den "alten" Weg loszulassen. Wie auch immer, hier ist das Problem. Ich beginne mit nur zwei Modellen (User und Property). Das Eigentumsmodell ist einfach, der Benutzer nicht so sehr. Ich habe festgestellt, dass wir drei Arten von Benutzern im System haben. Mieter, Eigentümer und Manager (mein Bruder wird der einzige Manager sein, aber ich dachte, ich würde es entwerfen, um zu wachsen) Er verwaltet Eigenschaften für mehrere Besitzer, von denen jeder viele Eigenschaften besitzen kann. Jede Immobilie hat einen Eigentümer, einen Mieter und einen Manager.
Mieter können sich anmelden und nur die Eigenschaft sehen, die sie vermieten, um vielleicht eine Wartungsanfrage oder etwas Ähnliches auszufüllen ... (keine wirkliche Anforderung an diesem Punkt, dem Mieter sogar einen Login zu geben, aber ich dachte es wäre eine gute Übung)
Das gleiche gilt für Besitzer, keiner von ihnen braucht wirklich Zugang zu dem System (sie mieten meinen Bruder, so dass sie nicht beteiligt sein müssen), aber ich dachte, es könnte nett sein und wieder ein gute Übung.
verwendete ich die Nifty_generator einen Benutzer zu erzeugen, die nur E-Mail gibt, ich Passwort usw. es erweitert als ...
class AddProfileDataToUsers < ActiveRecord::Migration
def self.up
add_column :users, :first_name, :string
add_column :users, :last_name, :string
add_column :users, :address1, :string
add_column :users, :address2, :string
add_column :users, :city,:string
add_column :users, :state, :string
add_column :users, :zip, :string
add_column :users, :phone, :string
add_column :users, :email, :string
add_column :users, :user_type, integer
end
def self.down
remove_column :users, :first_name
remove_column :users, :last_name
remove_column :users, :address1
remove_column :users, :address2
remove_column :users, :city
remove_column :users, :state
remove_column :users, :zip
remove_column :users, :phone
remove_column :users, :email
remove_column :users, :user_type
end
end
Hier folgt der Code ist es, die Eigenschaften Tabelle
class CreateProperties < ActiveRecord::Migration
def self.up
create_table :properties do |t|
t.string :address
t.string :city
t.string :type
t.integer :beds
t.float :baths
t.float :price
t.float :deposit
t.string :terms
t.string :laundry
t.datetime :date_available
t.integer :sqft
t.integer :owner_id
t.integer :manager_id
t.integer :tenant_id
t.timestamps
end
end
def self.down
drop_table :properties
end
end
erstellen
Ich habe Folgendes zu dem Benutzermodell hinzugefügt, das von dem Generator nifty_authentication
class User < ActiveRecord::Base
#other stuff in the user model up here......
validates_length_of :password, :minimum => 4, :allow_blank => true
#this is the stuff that I have added to the user model
has_many :managed_properties, :class_name => "Property", :foreign_key => "manager_id"
has_many :owned_properties, :class_name => "Property", :foreign_key => "owner_id"
has_one :rented_property, :class_name => "Property", :foreign_key => "tenant_id"
generiert wurde
ich diese dann auf das Objekt-Modell hinzugefügt ....
class Property < ActiveRecord::Base
belongs_to :manager, :class_name => "User" #picked up by the manager_id
belongs_to :owner, :class_name => "User" #picked up by the owner_id
belongs_to :tenant, :class_name => "User" #picked up by the tenant_id
end
Meine Frage ist, sieht dies wie ein akzeptabler Weg, um die Situation der Modellierung I beschrieben?
Sollte ich die Vererbung einzelner Tabellen verwenden und ein Tenant-Modell erstellen? ein Managermodell; und ein Besitzermodell? Das Problem, das ich dabei sah, war, dass ein einzelner Benutzer sowohl ein Manager als auch ein Besitzer sein konnte. Dies könnte dadurch gelöst werden, dass eine Rollentabellen für den Benutzer vorhanden sind, wobei ein Benutzer viele Rollen hat und eine Rolle viele Benutzer hat. Ich hatte auch eine Profiltabelle mit einer Eins-zu-Eins-Übereinstimmung mit der Benutzertabelle betrachtet und diese polymorph gemacht, aber ich dachte nicht, dass diese Situation das wirklich erfordert und es das Problem nicht gelöst hat, wo ein Benutzer ein Besitzer sein kann und ein Manager .....
Dies ist, wenn ich zu denken begann, dass ich vielleicht über das Denken des Problems war und kam auf, was Sie hier sehen.
Ich begrüße alle konstruktiven Kommentare, die Sie haben können. Bitte beachte, dass ich in Rails noch nie etwas gebaut habe und dies ist alles ein erster Versuch, vor einer Woche hatte ich noch nie Schienen auf meinem Computer installiert.
Ich weiß nicht, ob das wichtig ist, aber ich dachte, dass der Admin/Manager für die Erstellung von Benutzern verantwortlich wäre. Dies ist keine Selbstregistrierungsart der Site. Der Verwalter wird neue Besitzer hinzufügen, wenn er einen neuen Eigentümer anmeldet, und das gleiche gilt für die Mieter. Dadurch wird es einfacher, den Typ des Benutzers zu bestimmen, den er erstellt.
Vielen Dank für Ihre Einsichten.
+1 decl_auth sieht gut aus! – SingleNegationElimination