Запутался в ассоциации с активной записью рельсов

4 модель имеет следующие столбцы в своей таблице

student : student_id  name    dept
semester: semester_id semester_name
subject : subject_id  subject_name  semester_id
result  : student_id  semester_id   result_id result

Я связал модели как

student: has_many semesters
         has_many subjects through semesters
         has_many results through semesters

semester: belongs_to students
          has_many subjects
          has_many results

subject: belongs_to semesters
         has_many student through semesters

result: has_many students through semesters
        belongs_to semesters

Дайте мне знать, если это нормально. Я запутался в том, когда использовать own_to. Я имею в виду, могу ли я использовать что-то вроде ниже?

student: has_many semesters
         has_many subjects through semesters            

semester: has_many students
          has_many subjects              

subject: has_many semesters
         has_many student through semesters 

person asdfkjasdfjk    schedule 01.01.2014    source источник


Ответы (2)


Класс имеет определение contains_to, которое всегда соответствует таблицам БД с объявлением внешнего ключа.

person nickcen    schedule 01.01.2014
comment
Я обновил столбцы таблицы. Пожалуйста, проверьте сейчас и дайте мне знать, как я могу сделать ассоциацию - person asdfkjasdfjk; 01.01.2014
comment
@user1478137 user1478137 у вас в столбцах таблицы много проблем. Давайте уточним, что вы хотите сделать. Я думаю, что мы должны начать с семестра. 1. В системе много семестров. 2. В каждом семестре есть множество предметов. 3. По каждому предмету будет много учеников. 4. Для каждого ученика будет результат по каждому предмету, который он посещает. Это правильно? - person nickcen; 01.01.2014

Правильный способ сделать это таков:

Student: has_many :semesters
         has_many :subjects, through: semesters            

Semester: belongs_to :student
          belongs_to :subject              

Subject: has_many :semesters
         has_many :students, through: :semesters 

Вам потребуются следующие миграции:

drop_table :results # you won't need it anymore if you use has_many through
remove_column :students, :student_id, :integer
add_column :students, :id, :integer # if you don't have the ID column in your students table
remove_column :subjects, :subject_id, :integer
add_column :subjects, :id, :integer
add_reference :semesters, :student, index: true
add_reference :semesters, :subject, index: true
person Gjaldon    schedule 01.01.2014
comment
Я обновил столбцы таблицы. Пожалуйста, проверьте сейчас и дайте мне знать, как я могу сделать ассоциацию - person asdfkjasdfjk; 01.01.2014