Ruby On Rails-Benutzermodell für mehrere Typen

Ich lerne RoR aus vielen Jahren von C # und MSSQL.

Ich habe ein Projekt ausgewählt, um eine Website für meinen Bruder zu erstellen, der Vermieter ist. Ich dachte, dass dies ziemlich einfach sein sollte, da die Modelle geradlinig sein sollten, aber es könnte sein, dass ich über alles nachdenke oder Probleme habe, den "alten" Weg zu verlassen. Jedenfalls ist hier das Problem. Ich beginne mit nur zwei Modellen (Benutzer und Eigentum). Das Immobilienmodell ist einfach, der Benutzer nicht so sehr. Ich stellte fest, dass wir drei Arten von Benutzern im System haben. Mieter, Eigentümer und Verwalter (mein Bruder wird der einzige Verwalter sein, aber ich dachte, ich würde es so gestalten, dass es wächst) Er verwaltet Immobilien für mehrere Eigentümer, von denen jeder viele besitzen kann. Jede Immobilie wird einen Eigentümer, einen Mieter und eine Krippe haben.

Tenants können sich einloggen und sehen nur die Immobilie, die sie mieten, um vielleicht eine Wartungsanfrage oder ähnliches auszufüllen. (Zum jetzigen Zeitpunkt ist es nicht wirklich erforderlich, dem Mieter ein Login für das System zu geben, aber ich dachte, es wäre eine gute Übung

Das Gleiche gilt für Besitzer. Keiner von ihnen benötigt wirklich Zugriff auf das System (sie stellen meinen Bruder ein, damit sie nicht involviert werden müssen), aber ich dachte, dass es nett und wieder eine gute Übung sein könnte.

Ich habe den Nifty_generator verwendet, um einen Benutzer zu generieren, der nur E-Mail, Passwort usw. angibt. Ich habe ihn wie folgt erweitert ...

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 ist der Code zum Erstellen der Eigenschaftstabelle

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

Ich habe das folgende Benutzermodell zum Benutzermodell hinzugefügt, das vom nifty_authentication-Generator generiert wurde.

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"

Ich habe dies dann zum Eigenschaftsmodell 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 nach einer akzeptablen Methode aus, um die von mir beschriebene Situation zu modellieren?

Sollte ich die Vererbung einer einzelnen Tabelle verwenden und ein Mandantenmodell erstellen? ein Managermodell; und ein Besitzermodell? Das Problem dabei war, dass ein einzelner Benutzer sowohl Manager als auch Eigentümer sein konnte. Dies könnte gelöst werden, indem dann eine Rollentabelle für den Benutzer vorhanden ist, in der ein Benutzer viele Rollen und eine Rolle viele Benutzer hat. Ich hatte mir auch eine Profiltabelle mit einer Eins-zu-Eins-Übereinstimmung mit der Benutzertabelle angesehen und diese polymorph gemacht, aber ich dachte nicht, dass diese Situation dies wirklich erfordert, und sie löste nicht das Problem, bei dem ein Benutzer Eigentümer sein kann und ein Manager .....

Dies ist, als ich anfing zu denken, dass ich vielleicht über das Problem nachgedacht habe und auf das gekommen bin, was Sie hier sehen.

Ich freue mich über konstruktive Kommentare. Bitte denken Sie daran, dass ich noch nie etwas in Rails eingebaut habe und dies alles ein erster Versuch ist. Vor einer Woche hatte ich noch nie Schienen auf meinem Computer installiert.

Ich weiß nicht, ob dies von Bedeutung ist, aber ich habe mir gedacht, dass der Administrator / Manager für die Erstellung der Benutzer verantwortlich ist. Dies ist keine selbstregistrierte Site. Der Manager fügt neue Eigentümer hinzu, wenn er einen neuen Eigentümer anmeldet, und das Gleiche gilt für Mieter. Dies erleichtert die Ermittlung des Benutzertyps, den er erstellt.

Vielen Dank für Ihre Erkenntnisse.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage