0

以下の表を使用して問題を説明したいと思います。

university = University.where('class.name' => 'example', 'class.students.age' => '21').includes(:class, :student)

University
id
class.id
name

Class:
id
student.id
name
MaximumStudents

Student:
id
name
age

ご覧のとおり、テーブルはUniversityテーブルを参照していClassます。テーブルはClassテーブルを参照しStudentます。

exampleというクラスがあり、学生の年齢が高い大学を取得したいと考えています21。私はそれが奇妙だと知っていますが、それは私の問題を示しています:D

を取得するためのクエリを取得できませんStudent。「「学生」という名前の関連付けが見つかりませんでした」というエラーが常に表示されます

Studentテーブルを使用せずに次のようにするとうまくいきます

university = University.where('class.name' => 'example').includes(:class)
4

1 に答える 1

2

まず、モデルに「クラス」という名前を付けるのはお勧めできません。これは、Ruby(クラス用)の予約語であり、問​​題が発生する可能性があるためです。

それとは別に:モデルでは、次のようにモデルUniversityとの関係を指定する必要があります。Student

has_many :students, :through => :class

次に、次のような関係で必要なものを取得できます。

university = University.where('class.name' => 'example', 'students.age' => 21).includes(:class, :students)
于 2012-09-08T23:25:56.210 に答える