我正在學習來自多年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