我大概是太菜了
今天学习了一下rails中active record之中的模型关联
发现一对一 一对多 多对多都是有特定的写法的,并不是自己随便建个表连一下外键就可以
比如一对一采用belongs_to,一对多用has_many,多对多用has_many :through.
只有多对多才需要建立一个额外的关系表来保存关系。
所以,把我建立的模型重新改了一下,schame中的表建立如下:
create_table "departments", force: :cascade do |t|
t.string "name"
t.string "summary"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
create_table "keywords", force: :cascade do |t|
t.string "name"
t.integer "course_id"
t.index ["course_id"], name: "index_keywords_on_course_id"
end
create_table "teaching_relationships", force: :cascade do |t|
t.integer "teacher_id"
t.integer "course_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
需要说明的是:因为几乎还是在建表的阶段,并没有使用正规的migration操作,而是直接rake db:drop,修改了大部分的create migrate文件,再重新rake db:migrate的。实话实说这不是正确操作,按说应该每次都是追加migrate文件的,不过刚开始就这么改,未免有点打补丁的丑陋感觉。所以这么强行修改,希望我的队友们多担待。
这么写的话,有些东西需要队友来解决:
# 在users下 若user_type 是 teacher 应该有has_many :teachingRelationships;has_many :courses, through :teachingRelationships
# 在course下 应该有has_many :teachingRelationships;has_many :teachers, through :teachingRelationships
还有,删除了之前dept_courses这个表,在department model里声明has_many :courses。另外需要队友在course的迁移文件中标注belongs_to