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

物事がより複雑になってきた場合は、ユーザーのタイプごとにロジックを分離するために単一テーブル継承を使用して探ることができ別のクラスに入れます。

関連する問題