大家好日子,
而不是做整个" belongs_to"和" has_many"直接相关模型之间的关系,我通过添加大量的引用将它们连接起来。
我的理解是,唯一的区别是语义 - 然而,语义是非常重要的,并且考虑到我对rails(和一般的编程新手)的新手,并且鉴于我已经爱上了外键(< 3关系数据库),我害怕我可能玷污了我的数据库(:gasp)。总而言之,我有两个问题:1。保持这样的下降是什么? 2.我怎样才能改回来?
我已尝试通过以下步骤将其更改回来(对于某些迁移,并非所有迁移 - 我希望能够与之进行比较)1。删除迁移文件 - > 2.在模型文件中添加了相应的belongs_to / has_many关联,3。rails db:migrate。但是,它似乎没有改变任何东西。
任何见解都将受到赞赏。谢谢!
答案 0 :(得分:0)
当您说通过添加大量references
来连接它们时,听起来就像是迁移中的belongs_to
和has_many
?假设情况如此,你真的应该同时使用它们。在数据库中使用外键绝对是正确的设计,但您仍需要在模型中指定关联,以告诉Rails它是否存在!
答案 1 :(得分:0)
我假设当你说"引用"时,你在谈论数据库中的外键。要正确地执行操作,您确实需要外键和关联宏。 (belongs_to,has_many等)
这两个人在不同层面上工作。外键在关系数据库中设置关系,告诉它当查询进入数据库时,它可以使用这些列来查找另一个表上的记录。 (实际上,在迁移中使用public class UCFSemester<courses> {
private static UCFCourse courseOne;
private static double totalSemesters;
private static double completionTime;
static boolean fillSemester = true;
public UCFSemester(UCFCourse courseOne, UCFCourse[] coursetwo) {
this.courseOne = courseOne;
}
public static UCFCourse getcourseOne() {
return courseOne;
}
public static void setCoursesone(UCFCourse courses) {
courseOne = courses;
}
public static void fillWithCourses(UCFCourse courses[], int l) {
int x = 0;
while (fillSemester) {
for (int n = 0; n < 5; n++) {
if (x != n && courses[x].getCourseLevel() < courses[n].getCourseLevel()) {
setCoursesone(courses[x]);
}
}
fillSemester = false;
}
}
}
时,您所说的只是数据库应该在名称遵循特定模式的表上创建一些列.Rails没有指定应该创建这些列。默认情况下,作为正确的SQL外键。)这就是说引用只影响数据库列。
另一方面,您在模型中设置的关联告诉rails应用程序如何使用数据库查找关联的记录。如果您只使用关联,那么对关联的任何调用都将中断,因为它将依赖于不存在的列,如果您只在迁移中使用引用,那么尽管您将能够对数据库执行查询,rails不知道该怎么做。