我有三节课:
class Batch
has_many :final_grade_batches
end
class FinalGradeBatch
belongs_to :batch
belongs_to :student
end
class Student
has_many :final_grade_batches
end
我想通过以下方式检索final_grade_batch
:
batch = Batch.includes(:final_grade_batches).find(1)
batch.final_grade_batches.find_by(student_id: 2)
最后一行产生这个SQL查询:
FinalGradeBatch Load (0.6ms) SELECT "final_grade_batches".* FROM "final_grade_batches" WHERE "final_grade_batches"."batch_id" = $1 AND "final_grade_batches"."student_id" = 2 LIMIT 1 [["batch_id", 1]]
如果我在final_grade_batches
Batch
查询中加入find
,为什么还要再次查找final grade batch
?我知道它需要找到具有学生ID的那个,但是Rails应该进行查询才能得到它吗?它现在还没有加载到内存中吗?
有没有办法在没有Rails再次访问数据库的情况下获得final grade batch
?谢谢!
答案 0 :(得分:0)
find_by
始终进行数据库查询。用以下代替:
batch.final_grade_batches.select( |grade_batch| grade_batch.student_id == 2).first
这适用于您已从数据库加载的数组,而不是执行其他查询。