如果角色是STI表:
class Role< ActiveRecord::Base
self.inheritance_column= :role_type
end学生和辅导员继承角色:
class Student< Role
end
class Counselor< Role
endStudentDetail保留了一个学生的额外信息:
class StudentDetail< ActiveRecord::Base
belongs_to :student
end用户既可以是学生也可以是辅导员:
class User< ActiveRecord::Base
has_many :roles
has_one :student
has_one :counselor
endnumber是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“设置为StudentDetail记录并获取number字段。”
发布于 2012-03-24 19:41:07
您将拥有开箱即用的间接User.first.student.student_detail.number。我不认为这有多大的伤害:-)
我看到两个选项(至少)如何走得更远:
Student中的StudentDetail方法定义方法:定义编号self.student_detail?self.student_detail.number : nil end
def块(名称,*args,&method_missing) self.student_detail?Self.student_detail.send(名称,*参数,&block):nil end
https://stackoverflow.com/questions/9850506
复制相似问题