1

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を持つユーザーを返すのか、誰にも分かりますか? これは設計によるものですか?もしそうなら、それはなぜですか?

ありがとうございました。

4

1 に答える 1