0

我有一个用户模型,它与教师、学生和管理员具有多态关系。这三类用户分别属于一所学校。我想拥有它,以便用户的用户名在学校内是唯一的。我将如何编写验证来完成此操作?

这是我的模型的样子:

class User < ActiveRecord::Base
  belongs_to :profileable, :polymorphic => true
  delegate :school, :to => :profileable
end

class Student < ActiveRecord::Base
  belongs_to :school
  has_one :user, :as => :profileable
  delegate :name, :username, :to => :user
end

class Teacher < ActiveRecord::Base
  belongs_to :school
  has_one :user, :as => :profileable
  delegate :name, :username, :to => :user
end

class Admin < ActiveRecord::Base
  belongs_to :school
  has_one :user, :as => :profileable
  delegate :name, :username, :to => :user
end
4

1 回答 1

2

我很确定您需要为此使用自定义验证器。委托属性在用户模型中将不可用。您可以做的还包括school_id在 User 方法中并before_validate每次都使用它。然后你就可以使用“简单”的唯一性验证器:

validates :username, :uniqueness => {:scope => :school_id}

但是,加入可school_id配置父级的自定义验证器可能是一种更清洁的方法。

于 2013-09-18T07:38:09.600 回答