2012-03-21 2 views
3

У меня есть 4 модели в моих рельсах приложении:композитные ключевые ассоциациям в рельсах 3

класс/учитель/ученик/Присваивающие

мне нужно иметь:

п * п отношения между Классом и Учитель
n * n отношения между учителем и учеником

Для этих двух отношений это нормально, поскольку я создам 2 миграции для has_and_belongs_to_many.

Для модели Подборки, мне нужно, чтобы он связан с 3 предыдущими моделями:

Назначения стол должен быть как:
- идентификатор
- ярлык
- classroom_id
- teacher_id
- pupil_id

Является ли лучший подход к моделированию последних отношений?

class Assignment < ActiveRecord::Base 
    belongs_to: classroom 
    belongs_to: teacher 
    belongs_to: pupil 
end 

class classroom < ActiveRecord::Base 
    has_many: assignments 
end 

class teacher < ActiveRecord::Base 
    has_many: assignments 
end 

class pupils < ActiveRecord::Base 
    has_many: assignments 
end 

ответ

0

Рассмотрит полиморфную ассоциацию http://guides.rubyonrails.org/association_basics.html#polymorphic-associations

class Assignment < ActiveRecord::Base 
    belongs_to: assignable, :polymorphic => true 
end 

class Classroom < ActiveRecord::Base 
    has_many :assignment, :as => :assignable 
end 
+0

делает это объединение позволяет иногда только зрачка связанно с уступкой, иногда кортеж (зрачок, учитель), а также имеет (Pupil, учитель, Класс), привязанный к заданию? Хм ... Я не уверен, что я понятен, но, на мой взгляд, назначение должно быть связано с кортежем (где одно или два поля могут быть пустыми). – Luc

+0

Может ли несколько записей разделять одно и то же задание? Допустим, у меня есть ученик с id: 2, Classroom с id: 5, может ли Assignment с id: 20 быть привязанным к кортежу (2,5)? – Luc

+0

Нет, он не может, присваивание может принадлежать только одной модели – gayavat

Смежные вопросы