0

教師、学生、および管理者と多態的な関係を持つユーザー モデルがあります。これら 3 種類のユーザーは、それぞれ学校に属しています。ユーザーのユーザー名が学校内で一意になるようにしたいと思います。これを達成するための検証をどのように記述しますか?

私のモデルは次のようになります。

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

これにはカスタムバリデーターを使用する必要があると確信しています。delegated 属性は User モデルでは使用できません。できることはschool_id、 User メソッドに を含めて、before_validate毎回使用して設定することです。次に、「単純な」一意性バリデーターを使用できます。

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

school_idただし、プロファイリング可能な親の に参加するカスタムバリデーターは、おそらくよりクリーンな方法です。

于 2013-09-18T07:38:09.600 に答える