【问题标题】:ActiveRecord: Filter record by nested record attributeActiveRecord:按嵌套记录属性过滤记录
【发布时间】:2016-10-03 15:21:36
【问题描述】:

在我的 Rails 应用程序中,我有 2 个模型:学生和课程。

学生有很多课程。

在 Rails 控制台中运行命令 Student.first.courses 将返回属于第一个学生的课程集合。

我想知道是否可以编写一个命令来检查是否有任何学生学习特定课程。

例如,如果我想看看是否有学生将“英语”作为他们的课程之一,我该怎么写?

任何帮助将不胜感激 - 谢谢!

【问题讨论】:

  • 课程属于学生?这样,您将拥有同一课程的许多实例(每个学生一次),您可能想要重新审视您的设计并拥有它,学生 拥有并属于许多(或 拥有多次通过,请阅读两者的文档),这样您就可以在学生之间共享一个“英语”实例。

标签: ruby-on-rails ruby ruby-on-rails-4 activerecord


【解决方案1】:

是的,这绝对有可能:

Student.joins(:courses).where(courses: { name: 'English' })

有关该主题的更多信息,请参阅the docs

【讨论】:

  • 这正是我想要的。谢谢,我会查看您链接的文档并在计时器到期后接受您的回答。
【解决方案2】:

根据 Andrey 的回答,您可以将其封装在 Student 模型的范围内,如下所示:

scope :taking, ->(subject_name) { joins(:courses).where(courses: {name: subject_name})}

然后将其用于:

Student.taking("English")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多