生徒が割り当てられたテストを試みたかどうかを確認しようとしています。複数のモデルをチェーン化してSQLクエリの数を減らす方法
class Test < ActiveRecord::Base
has_many :assigns
has_many :attempts
belongs_to :topic
end
class Topic < ActiveRecord::Base
has_many :tests
has_many :attempts
has_many :assigns, through: :test
end
class Assign < ActiveRecord::Base
belongs_to :test
belongs_to :student
has_many :attempts
end
class Attempt < ActiveRecord::Base
belongs_to :test
belongs_to :topic
belongs_to :assign
belongs_to :student
end
私は特定の学生(ID:100)かどうかを確認したい
:割り当てられたテストをしようとしたか、私は私のモデルがあり、次のちょうど1にクエリの数をダウンさせるために、関連するモデルチェーンにしたいですまた、テストのトピック名などのその他の詳細も取得します。
ta = Assign.includes(:test => {:topic => :attempts})
これは私がそのようなことは、単一のクエリ内などに割り当てられたTEST_NAME、TOPIC_NAME、などの詳細を取得することができます。これまでのところ私はこのようなものを持っています。 student_id:100の試行記録を同じクエリに含めるにはどうすればよいですか?私が今持っているもので、生徒の試行の詳細を取得すると、新しいクエリが生成されます。私が欲しいもの
は再びデータベースを触れることなくfollwoingのようなものです:
ta.test.attempts.where(student_id: 100)
私はちょうど1クエリですべてこれを行うにはどうすればよいですか?
は、 'assign'、' topic'、 'attempt'に必要な' test_'プレフィックスですか?あまりにも多くのことがここで起こっている、それは少し読みにくいです。あなたはER図を載せることができますか? – lusketeer
@lusketeer明快にするためにtest_を削除しました。 – liquorishe