2012-01-13 140 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' } 

如果事情开始变得更加复杂,你可以探索使用单表继承的逻辑为每种类型的用户分开分成一个班级。