验证用户模型中特定角色名称的唯一性?

时间:2012-01-13 02:06:34

标签: ruby-on-rails ruby ruby-on-rails-3 devise

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 个答案:

答案 0 :(得分:1)

如果您只有一个管理员角色,则可以执行以下操作:

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

如果事情开始变得更复杂,您可以探索使用单表继承将每种类型的用户的逻辑分成单独的类。