サブスクリプションをRailsで使用しているときに奇妙な動作が発生しました。非サブクエリを生成するのにうまくいきますが、Railsは完全なクエリを構築するときに結合テーブルについて「忘れる」ようです。サブクエリ実行時にActiveRecordに結合テーブルがありません
ここは例です。私が使っているテーブルにあまり注意を払わないようにしてください。これは実際のクエリが実際には複雑すぎるためです。
この1つは動作します:
2.4.0 :015 > User.all.includes(:company).where(companies: {id: 0})
SQL (0.5ms) SELECT `users`.`id` AS t0_r0, [..]
`companies`.`id` AS t1_r0, [..]
FROM `users` LEFT OUTER JOIN `companies` ON `companies`.`id` =
`users`.`company_id` WHERE `companies`.`id` = 0 ORDER BY
`users`.`username` ASC
=> #<ActiveRecord::Relation []>
をしかし、私はどこでそれをすべてをラップする場合:
2.4.0 :016 > User.where(id: User.all.includes(:company).where(
companies: {id: 0}).references(:companies))
User Load (1.3ms) SELECT `users`.* FROM `users` WHERE `users`.`id`
IN (SELECT `users`.`id` FROM `users` WHERE `companies`.`id` = 0 ORDER
BY `users`.`username` ASC) ORDER BY `users`.`username` ASC
ActiveRecord::StatementInvalid: Mysql2::Error: Unknown column
'companies.id' in 'where clause'
は私が欠けている明白なものはありますか?または、Railsはサブクエリの結合を処理できませんか?
また、私はjoins()を使用できる位置にいません。また、結合が結果をもたらさないレコードを返す必要があるため、includes()が必要です。
私はRuby 2.4.0とRails 5.0.2を使用しています。
それはそれを解決しました!ありがとう! – Jacotb