使用链接数据

时间:2015-07-14 13:41:43

标签: mysql ruby-on-rails

概述:

我有一个使用mysql数据库的rails项目,该数据从2个来源上传大学生成绩。

当我上传成绩时,我需要先找到“注册”记录,了解该学生注册的课程的哪一部分。“注册”通过belongs_to连接到“学生”和“部分”。学生将存在于学生表中,但是部分和注册可能存在也可能不存在。如果它们不存在,我想创建它们。

当前代码:

我目前解决这个问题的尝试是:

enrolled = Enroll.find_or_create_by(Student: student, 
    Section: {Course: course, semester: semester, year_offered: year_taken})

我收到以下错误:

Mysql2 ::错误:'where子句'中的未知列'Section.semester':SELECT enrolls。* FROM enrolls WHERE Sectionsemester ='秋天'AND Sectionyear_offered = 2012 AND SectionCourse_id = 4 AND enrollsStudent_id = 11 LIMIT 1

问题:

1)这是进行此查询的正确方法吗?如果该部分不存在,我是否需要多步骤?

2)为什么我会收到未知的列错误?

其他细节:

sections = Section.where(课程:课程,学期:semester,year_offered:year_taken)工作正常。

注册belongs_to学生和部门。

学生和部分有很多人参加 模型依赖关系图的相关部分是:

enter image description here

我是rails的新手,所以如果你需要别的东西,请告诉我。或者,如果有其他页面已经解释了这一点,请指出我。我发现很难找到相关页面,因为我在搜索时并不熟悉术语。

2 个答案:

答案 0 :(得分:1)

看起来您没有加入查询中的Section表。试试这个:

SELECT enrolls.* FROM enrolls 
INNER JOIN Section ON enrolls.belongs_to = Section.belongs_to
WHERE Section.semester = 'Fall' 
AND Section.year_offered = 2012 
AND Section.Course_id = 4 
AND enrolls.Student_id = 11 
LIMIT 1

答案 1 :(得分:0)

为每个班级做一次,即

section = Section.find_or_create_by(Course: course, semester: 
  semester, year_offered: year_taken)

enrolled = Enroll.find_or_create_by(Student: student, 
section_id: section.id)