我正在学习来自多年c#和MSSQL的RoR。Ruby On Rails多种类型的用户模型
我选择了一个项目为我的兄弟谁是租赁物业经理建立一个网站。我认为这应该是相当容易的,因为模型应该是直截了当的,但是它认为我可能会过度思考一切,或者我无法放弃'旧'方式。无论如何,这是问题。我开始时只有两个模型(用户和财产)。属性模型很简单,用户不多。我认为我们在系统中有三种类型的用户。租户,业主和经理(我的兄弟将是唯一的经理,但我想我会设计它成长)他管理的财产,他们每个人都可以拥有许多财产。每个物业将有一个业主,一个租户和一个经理。
租户将能够登录,只是看到他们租用的财产,可能会填写维护请求或类似的东西......(在这一点上没有真正的要求,即使租户登录系统,但我认为它将是一个很好的锻炼)
同样的事情,所有者都没有真正需要访问系统(他们雇用我的兄弟,所以他们不必参与),但我认为这可能是很好的,又一次好的练习。
我用Nifty_generator生成一个用户,它只是给了电子邮件,密码等我如下扩展了它...
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
下面是创建属性表的代码
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
添加以下到先前由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"
然后我加入这属性模型....
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
我的问题是,这是否看起来像建模我所描述的情况的一种可接受的方式?
我应该使用单表继承和创建租户模型;经理模式;和所有者模型?我所看到的问题是,单个用户可能既是经理又是所有者。这可以通过为用户提供角色表来解决,其中用户具有多个角色并且角色拥有多个用户。我还查看了一个与用户表进行一对一匹配的配置文件表,并制作了这个多态的表格,但我并不认为这种情况真的需要这样做,它并没有解决用户可以成为拥有者的问题和一个经理.....
这是当我开始认为,也许我是在思考问题,并提出了你在这里看到的。
我欢迎您可能有的任何建设性意见。请记住,我从来没有真正在Rails中构建过任何东西,这是第一次尝试,一周前我甚至从未在我的计算机上安装过rails。
我不知道这是否重要,但我认为管理员/经理将负责创建用户。这不会是一个自我注册类型的网站。经理在签订新业主时会增加新的业主,而租户也是如此。这将更容易确定他正在创建的用户的类型。
感谢您的任何洞察力。
+1 decl_auth看起来不错! – SingleNegationElimination 2010-10-18 05:59:31