老师和课程是多对多的关系 那中间表写成 teachers_kechengs 和 kechengs_teachers 不是一样么?为什么在我的程序中写成后者就正确 写成前者就说找不到表呢?费解
杜绝拼音阿!
PS.
http://ihower.tw/rails3/activerecord-relationships.html
这样会不会更好?
lecture_teacherships
@ichord 对对对 我搜索 ror 东西的时候结果里总会有这个网站 但是用 IE 看不到里面的内容 我一直以为这网站有问题呢 刚才还 Chrome 就能看了 杯具啊
#2 楼 @ichord 啊。我按照 ihower 的这篇文章做得,但是在中间表添加记录的时候出错
s1 = Supplier.create
r1 = Representative.create
Account.new(:supplier => s1, :representative => r1)
ActiveModel::MassAssignmentSecurity::Error: Can't mass-assign protected attributes: supplier, representative
目测是 model 里面没加 attr_accessible, 但是加上
attr_accessible :supplier, :representative
之后就变成了
ActiveRecord::AssociationTypeMismatch: Supplier(#70329520740200) expected, got Supplier(#70329532252340)
大概是因为 model 里面没有这两个属性吧?model 里面应该只有 :supplier_id 和 :representative_id
到底咋样才能正确的添加中间表记录啊..
这种情况一定好好好想中间表是不是也代表了业务逻辑。比如说,老师和课程的中间表是什么,是不是可以叫“授课”, “教课任务”,等等?要根据你的业务模型起一个合适的名字。起了好名字往往会给你带来柳暗花明的感觉,比如说,如果是个教务管理系统,可能叫“教学任务”更合适。那么连带而来的,是不是有分配教课任务的人,是不是可以取消,修改?每个教学任务老师是不是得到相应的报酬?这些相应的业务逻辑一下子因为好的命名有了一个合适的地方,而不是在你的 CourseController 里面堆积。
如果应用是老师们用的系统,可能这个更合适叫“授课”,那么连带的比如说授课的效果,每次授课的反馈等等,学生的出勤情况也可以和一个“授课”来做关联。这些,如果把中间表叫做“kechengs_teachers"就很难想到。那么相关的业务逻辑就会散落到应用的各个地方,难以维护。
最后,这种选择更容易适应业务的变化。比如,一但现在说每个课程两个老师来教一个主教一个助理,如果你的模型叫“kechengs_teachers", 你可能不知道如何入手。如果你的模型叫“授课“,你会一下想到,只要一个“primary_teacher_id" 一个”assistant_teacher_id" 就可以了!多简单
"计算机科学里面只有两件难事 - 缓存过期和给东西命名" http://martinfowler.com/bliki/TwoHardThings.html