9

マルチスコープの一意性検証の動作を明確にしたかったのです。ドキュメントには次のように書かれています。

または、複数のスコープパラメータもあります。たとえば、教師が特定のクラスの学期ごとに1回だけスケジュールに参加できるようにします。

class TeacherSchedule < ActiveRecord::Base
  validates_uniqueness_of :teacher_id, :scope => [:semester_id, :class_id]
end

これについての私の理解は、同じ学期に2つのクラスを教える教師を雇うことはできますが、同じクラスを教えることはできません。また、異なる学期に同じクラスを教える教師を雇うこともできます。これは正しいです?検証が失敗するためには、3つのフィールドすべてが既存のレコードと一致する必要がありますか?

semester_idまたはclass_idのいずれかが一致した場合に失敗するように検証する方法はありますか?

4

2 に答える 2

11

これについての私の理解は、同じ学期に2つのクラスを教える教師を雇うことはできますが、同じクラスを教えることはできません。また、異なる学期に同じクラスを教える教師を雇うこともできます。これは正しいです?検証が失敗するためには、3つのフィールドすべてが既存のレコードと一致する必要がありますか?

はい、これは正しいです。「の一意の値ごとscopeに、フィールドは1回しか表示されない」ということです。が配列の場合scope、「スコープの一意の値」はフィールドの値の組み合わせです。

semester_idまたはclass_idのいずれかが一致した場合に失敗するように検証する方法はありますか?

では、教師は1学期に2回教えてはいけません。また、別の学期であっても、同じクラスを教えてはいけません。それは正しくないようですが、それぞれの検証でそれを行うことができます:

class TeacherSchedule < ActiveRecord::Base
  validates_uniqueness_of :teacher_id, :scope => :semester_id
  validates_uniqueness_of :teacher_id, :scope => :class_id
end
于 2012-12-01T20:19:41.873 に答える
0

一意性の検証がスコープでどのように機能するかを理解したばかりです。皆さんと共有したいと思います。

組織内に複数の部門があり、どの従業員も同時に2つ以上の部門に所属できるとします。従業員の電子メールIDが各部門で一意であることを確認するために、スコープを使用します。

このようにすることで、同じメールアドレスを持つ2人の従業員が同じ部門で働くことがないようにすることができます。また、特定の従業員が働いているすべての部門を見つけることができます。

簡単に言うと、スコープを使用した一意性の検証は、両方の属性(この場合は電子メール、部門)のいくつかで機能します。

于 2017-01-04T10:26:28.073 に答える