Rails 4.2.1で複雑なSQLクエリに取り組んでいます
def self.proofreader_for_job(job)
User.find_by_sql(
"SELECT * FROM users
INNER JOIN timers
ON users.id = timers.proofreader_id
INNER JOIN tasks
ON tasks.id = timers.task_id
WHERE tasks.job_id = #{job.id}")
end
私のスキーマは(ジョブには_多くのタスクがあり、タスクには_多くのタイマーがあり、タイマーは外部キーの校正者_idを介してユーザー(ロール:校正者)に属しています)
問題は、メソッドを呼び出すと、正しいユーザーの電子メールと属性が返されますが、ID が一致しないことです。
たとえば、 User.proofreader_for_job(job) は戻ります
[#<User id: 178, email: "testemail@gmail.com">]
testemail@gmail.com は正しい電子メールですが、データベースに 178 の ID を持つユーザーがいません。
User.all を返すだけ
[#<User id: 12, email: "fakeemail@gmail.com">,
#<User id: 11, email: "testemail@gmail.com">]
rspec テストでこの問題に気付きましたが、開発環境とテスト環境の両方で発生します。
なぜ私のメソッドがこのような高いIDを持つユーザーを返すのか、誰にも分かりますか? これは設計によるものですか?もしそうなら、それはなぜですか?
ありがとうございました。