【问题标题】:Rails - Show matching recordsRails - 显示匹配记录
【发布时间】:2014-07-23 00:43:33
【问题描述】:

如何执行 Rails 查询以显示 StudentExam 中存在匹配项的所有考试?我有 3 张桌子,学生、考试和学生考试。前两个是自我描述的。 StudentExam 表有 3 个字段:student_id、exam_id 和 status。我想在 StudentExam 中搜索特定用户 ID(例如 1)并显示该学生的所有匹配考试。

【问题讨论】:

    标签: sql ruby-on-rails ruby-on-rails-4 ruby-on-rails-4.1


    【解决方案1】:

    那么你有一个连接表,一个 has_and_belongs_to_many 还是什么?在这种情况下

    @user = User.find(1)
    @exams = @user.exams
    

    或者如果不是这种情况,并且第三个表是基于模型的,那么首选方式

    @exams = Exam.joins(:student_exams).where("student_exams.student_id = ?" 1)
    

    还有

    @exams = StudentExam.where(student_id: 1).each.collect { |row| row.exam }
    

    编辑

    要同时收集它们,可能是这样的

    @exams = StudentExam.where(student_id: 1).each.collect { |row| [row, row.exam] }
    

    【讨论】:

    • 如何同时显示 Exam 和 StudentExam 的字段?它只显示考试中的字段。
    【解决方案2】:
    select se.*, e.*
      from studentexam se
      join exam e
        on se.exam_id = e.id
     where se.student_id = 'X'
    

    将上面的“e.id”替换为 EXAM 表中表示与 EXAM 表的 EXAM_ID 字段关联的考试 ID 的任何字段。

    将“X”替换为感兴趣的 student_id。

    如果您想从 EXAM 表中选择部分而非全部列,请在选择列表中更改 e.*。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-12
      • 1970-01-01
      相关资源
      最近更新 更多