rails references:将关联放在一边

时间:2017-01-13 17:23:52

标签: ruby-on-rails postgresql

大家好日子,

而不是做整个" belongs_to"和" has_many"直接相关模型之间的关系,我通过添加大量的引用将它们连接起来。

我的理解是,唯一的区别是语义 - 然而,语义是非常重要的,并且考虑到我对rails(和一般的编程新手)的新手,并且鉴于我已经爱上了外键(< 3关系数据库),我害怕我可能玷污了我的数据库(:gasp)。总而言之,我有两个问题:1。保持这样的下降是什么? 2.我怎样才能改回来?

我已尝试通过以下步骤将其更改回来(对于某些迁移,并非所有迁移 - 我希望能够与之进行比较)1。删除迁移文件 - > 2.在模型文件中添加了相应的belongs_to / has_many关联,3。rails db:migrate。但是,它似乎没有改变任何东西。

任何见解都将受到赞赏。谢谢!

2 个答案:

答案 0 :(得分:0)

当您说通过添加大量references来连接它们时,听起来就像是迁移中的belongs_tohas_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不知道该怎么做。