Если роль является таблицей STI:
class Role< ActiveRecord::Base
self.inheritance_column= :role_type
end
И студент и советник наследуют роль:
class Student< Role
end
class Counselor< Role
end
А StudentDetail хранит дополнительную информацию об одном студенте:
class StudentDetail< ActiveRecord::Base
belongs_to :student
end
Причем пользователь может быть как учеником, так и вожатым:
class User< ActiveRecord::Base
has_many :roles
has_one :student
has_one :counselor
end
И номер — это столбец в StudentDetail, а role_id — это столбец в StudentDetail.
Можно ли заставить работать следующий синтаксис?
User.first.student.number
Значение: «если в таблице ролей есть один студент с user_id == User.first.id, тогда User.first.student не равен нулю, и если StudentDetail имеет role_id == Student.where («user_id =?», User.first.id) .first.id, сделайте так, чтобы «студент» действовал как запись StudentDetail и получил числовое поле».