2

has_many :through, :uniq => trueリレーションシップを介して結合された School オブジェクトと User オブジェクトの間に ActiveRecord があります。

学校のクラスでは、生徒を照会する特定の方法があります。

def students
  self.users.where(educations: {end_date: nil})
end

これは、一意のユーザーのみ (重複なし) を正しく表示しているように見えますが、奇妙なことに、school.students.size重複したレコードを含む数が表示されます! しかし、school.students から返された列挙型を見ると、一意のレコードしか表示されません。

where クエリの最後に #uniq を追加してみました。これで問題は解決しないようです。これまでのところ、私の唯一の解決策は使用することですschool.students.compact.sizeが、これは正しくありません。

ちなみに、school.users.size正確な数を教えてください。

4

1 に答える 1

0

countデータベースでカウント クエリを実行できるため、ActiveRecord::Relation オブジェクトで使用する必要があります。を呼び出すsizeと、データベースからすべてのオブジェクトがフェッチされ、配列が作成され、それが呼び出さsizeれます。ただし、これはおそらく問題を解決しません。

別の関連付けを作成すると違いが生じますか?

has_many :students, class_name: User, through: SchoolUsers(?), conditions: {educations: {end_date: nil}}
于 2013-03-18T23:40:51.297 に答える