2010-09-02 101 views
2

所以軌道內,使用活動記錄,我們可以繼承用戶單表繼承Ruby on Rails的

基類多種型號 - 用戶 子類 - 員工,經理,主管

所以在軌我們只使用一個表,儘管當你創建一個新的員工時,當你嘗試訪問Employee.salary時,儘管只有管理者和主管應該有權訪問這些屬性。你如何保護這些? Attr方法?

在此先感謝。

回答

2

很久以前,我在一個項目中設置了STI。我現在忘記了細節,但是這裏有一些可能有幫助的代碼。這是來自Rails 2.3.4。不知道它會在Rails 3中看起來像什麼。 默認情況下,帶有任何名爲type的列的Rails用於單表繼承目的。如果您需要指定,請使用「set_inheritance_column」,如下所示。 我不記得能夠保護其他子類的一個子類的屬性。就像你提到的,它的全部存儲在同一張表中。我想我在那個時候嘗試過,但當時對Rails很陌生。我認爲它可以通過attr_accessable或子類上的東西來實現。我可能是錯誤的,但試試看。

class User < ActiveRecord::Base 
    set_inheritance_column :user_type 
    attr_protected :user_type 
end 

class BusinessOwner < User 
    has_many :businesses 
end 

class SiteUser < User 
end 

從架構:

create_table "users", :force => true do |t| 
    t.string "user_type" 
    t.string "username" 
    t.string "email" 
    t.integer "location_id" 
... 
end