RailsでObject.has_many.has_manyという関連が組んである場合のデータ取得

こんにちは!kossyです!



さて、今回は、Object.has_many.has_manyという関連が組んである場合のデータ取得の方法を
ブログに残したいと思います。



環境
Rails 5.2.3
Ruby 2.5.1
MacOS Mojave



mapやflattenを使う!



「学生は講義をいっぱい持っていて、講義は科目をいっぱい持っている」とします。

Student has_many rectures
recture has_many subjects

ここで、
「その学生が持つ講義の科目を全て取得したい」とします。

その場合、

$ student = Student.first

$ student.rectures.map{|rec| rec.subjects }.flatten

こうすることで実現可能です。

要件が変わって、
「その学生が持つ講義の科目名を全て取得したい」となっても、

$ student = Student.first

$ student.rectures.map{|rec| rec.subjects }.flatten.pluck(:name)

とすることで対応可能です。