Modelo de usuario de Ruby On Rails para varios tipos

Estoy aprendiendo RoR proveniente de muchos años de c # y MSSQL.

Elegí un proyecto para construir un sitio web para mi hermano que es administrador de propiedades de alquiler. Pensé que esto debería ser bastante fácil, ya que los modelos deberían ser sencillos, pero creo que puedo estar pensando demasiado en todo o estoy teniendo problemas para dejar el "viejo" camino. De todos modos, aquí está el problema. Estoy comenzando con solo dos modelos (Usuario y Propiedad). El modelo de propiedad es fácil, el usuario no tanto. Pensé que tenemos tres tipos de usuarios en el sistema. Inquilinos, propietarios y gerentes (mi hermano será el único gerente pero pensé que lo diseñaría para crecer) Él administra propiedades para varios propietarios, cada uno de los cuales puede tener muchas propiedades. Cada propiedad tendrá un propietario, un inquilino y un administrador.

Los inquilinos podrán iniciar sesión y solo ver la propiedad que alquilan para tal vez completar una solicitud de mantenimiento o algo así ... (no es un requisito real en este punto incluso dar al inquilino un inicio de sesión en el sistema, pero pensé que sería un buen ejercicio)

Lo mismo ocurre con los propietarios, ninguno de ellos realmente necesita acceso al sistema (contratan a mi hermano para que no tengan que involucrarse), pero pensé que podría ser agradable y nuevamente un buen ejercicio.

Utilicé el Nifty_generator para generar un usuario, que solo proporciona correo electrónico, contraseña, etc. Lo he extendido de la siguiente manera ...

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

Aquí está el código para crear la tabla de propiedades

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

Agregué lo siguiente al modelo de usuario que fue generado por el generador de autenticación nifty

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"

Luego agregué esto al modelo de propiedad ...

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

Mi pregunta es, ¿esto parece una forma aceptable de modelar la situación que describí?

¿Debo usar la herencia de una sola tabla y crear un modelo de inquilino; un modelo de gerente; y un modelo de propietario? El problema que vi al hacer eso fue que un solo usuario podía ser tanto gerente como propietario. Esto podría resolverse teniendo tablas de roles para el usuario donde un usuario tiene muchos roles y un rol tiene muchos usuarios. También había mirado una tabla de perfil con una coincidencia individual con la tabla de usuario y haciendo esto polimórfico, pero no pensé que esta situación realmente requiriera eso y no resolvió el problema donde un usuario puede ser propietario y un gerente .....

Esto es cuando comencé a pensar que tal vez había terminado de pensar el problema y se me ocurrió lo que ves aquí.

Agradezco cualquier comentario constructivo que pueda tener. Tenga en cuenta que en realidad nunca he construido nada en Rails y todo esto es un primer intento, hace una semana ni siquiera había instalado rails en mi computadora.

No sé si esto importa, pero pensé que el administrador / gerente sería responsable de crear usuarios. Este no será un tipo de sitio de autorregistro. El gerente agregará nuevos propietarios cuando registre un nuevo propietario, y lo mismo se aplicará a los inquilinos. Esto facilitará la determinación del tipo de usuario que está creando.

Gracias por cualquier idea que pueda tener.

Respuestas a la pregunta(2)

Su respuesta a la pregunta