2012-01-13 59 views
0
add_column :users, :role, :string 

class User < ActiveRecord::Base 
    attr_accessible :email, :password, :remember_me, :username 
    devise :database_authenticatable, ................ 
    validates_uniqueness_of :username, :email 
    before_create :setup_default_role_for_new_users 
    ROLES = %w[admin default banned] 

    private 
    def setup_default_role_for_new_users 
    if self.role.blank? 
     self.role = "default" 
    end 
    end 
end 

有沒有一種方法可以讓我特別是在我的:role列驗證的名字嗎?我想提出我"admin"作用獨特,所以我可以存在保證其安全原因無法再次使用。驗證獨特性?

回答

1

如果你只有一個管理員角色,你可以做這樣的事情:

validates_uniqueness_of :name, :if => lambda {|user| user.role == 'admin' } 

如果事情開始變得更加複雜,你可以探索使用單表繼承的邏輯爲每種類型的用戶分開分成一個班級。