私はこれらのモデルを持っています:
class Question
has_many :answers
end
class Answer
belongs_to :question
end
class Exam
belongs_to :general_exam
belongs_to :user
has_many :questions, through: :exam_questions
end
class ExamQuestion
belongs_to :exam
belongs_to :question
end
現在、試験のすべての質問と質問の回答を取得したいので、Specifying Conditions on Eager Loaded Associationsを使用し、コンソールでこれを実行しました。
exam = Exam.find(16)
questions = Question.includes(:answers).where("id = ?", exam.question_ids)
実行後のコンソール出力questions = ...
:
SELECT "questions".id FROM "questions" INNER JOIN "exam_questions" ON "questions"."id" = "exam_questions"."question_id" WHERE "exam_questions"."exam_id" = 16 ORDER BY questions.created_at DESC
Question Load (0.8ms) SELECT "questions".* FROM "questions" WHERE (id = 170,162,160) ORDER BY questions.created_at DESC
=> #<ActiveRecord::Relation:0x4c07ebc>
最初の奇妙なことは、クエリで見た、それはINNER JOINを実行しましたが、レールガイドでは、クエリがLEFT OUTER JOINを作成すると言いました。なぜこれが違うのかわかりません。
次に、 で質問オブジェクトを取得したいので、次のようquestions
に実行しました。
questions.each do |q|
puts q.content
end
エラーが返されました:
SELECT "questions".* FROM "questions" WHERE (id = 170,162,160) ORDER BY questions.created_at DESC
ActiveRecord::StatementInvalid: PG::Error: ERROR: argument of WHERE must be type boolean, not type record
LINE 1: SELECT "questions".* FROM "questions" WHERE (id = 170,162,1...
質問オブジェクトを取得するにはどうすればよいですか?