【问题标题】:Query multiple tables with linked data使用链接数据查询多个表
【发布时间】:2015-07-14 13:41:43
【问题描述】:

概述:

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

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

当前代码:

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

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

我收到以下错误:

Mysql2::Error: 'where 子句'中的未知列'Section.semester': SELECT enrolls.* FROM enrolls WHERE Section.semester = 'Fall' AND Section.@987654328 @ = 2012 和 Section.Course_id = 4 和 enrolls.Student_id = 11 限制 1

问题:

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

2) 为什么会出现未知列错误?

其他细节:

sections = Section.where(Course: course, semi-term: term, year_offered: year_taken) 工作正常。

注册属于_学生和部门。

学生和部门 has_many 注册 模型依赖图的相关部分是:

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

【问题讨论】:

  • 如果您希望Section 表有一个semester 列,如图所示,您可能需要迁移您的数据库,因为Rails 看不到它。您可以随时查看db/schema.rb 以查看已迁移的内容。另外,我认为您不能通过一次调用 find_or_create_by 在单独的表中创建实例。

标签: mysql ruby-on-rails


【解决方案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

【讨论】:

    【解决方案2】:

    每个班级都做一次,即

    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)
    

    【讨论】:

      猜你喜欢
      • 2023-01-31
      • 2011-03-28
      • 2019-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多