我的rails应用程序有两个模型,StudentProfile和ClassProfile,它们通过连接表(模型注册)关联。
在我的ClassProfile模型中,我有:
has_many :enrollments
has_many :student_profiles, through: :enrollments
在我的StudentProfile模型中,我有:
has_one :enrollment
has_one :class_profile, through: :enrollment
我的注册表还有一个状态整数字段。
我想在名为“roster”的ClassProfile模型中添加一个方法,该方法返回注册状态为1的所有student_profiles。现在,我有以下内容:
def roster
self.student_profiles
end
毋庸置疑,无论入学状况如何,所有这一切都归功于班上的所有学生。我觉得这应该很简单,但我没有看到如何在连接表(注册表)上添加过滤的示例。这是我可以在ClassProfile模型中完成的事情,还是我需要在注册(或其他地方)中做某事?
更新
通过查看@QMFNP提到的查询引用,这里是有效的代码:
self.student_profiles.includes(:enrollment).where('enrollments.status = ?', 1)
需要将:enrollments
更改为:enrollment
,因为它是has_one
关联。我正在过滤的enrollments
字段为status
,因此将enrollments.id
更改为enrollments.status
。
谢谢!
答案 0 :(得分:1)
这可以通过在关联上指定查询条件来实现,如下所示:
def roster
self.student_profiles.includes(:enrollment).where('enrollments.status = ?', 1)
end
这应该会返回您的预期结果。有关查询Active Record关联的更多信息,请访问:
http://guides.rubyonrails.org/active_record_querying.html
希望有所帮助!