The join order of tables has been changed in Rails6.
So, An error occurs when trying to use a column from a non-joined table for join.
Steps to reproduce
class Book < ApplicationRecord
has_many :book_authors
end
class BookAuthor < ApplicationRecord
belongs_to :book
belongs_to :author
end
class Author < ApplicationRecord
has_one :book_author
has_one :name
end
class Name < ApplicationRecord
belongs_to :author
end
Book.left_outer_joins(:book_authors).merge(BookAuthor.left_outer_joins(:author).merge(Author.left_outer_joins(:name)))
Expected behavior
in Rails 5.2.4.1
Book.left_outer_joins(:book_authors).merge(BookAuthor.left_outer_joins(:author).merge(Author.left_outer_joins(:name)))
Book Exists (1.9ms) SELECT 1 AS one FROM `books` LEFT OUTER JOIN `book_authors` ON `book_authors`.`book_id` = `books`.`id` LEFT OUTER JOIN `authors` ON `authors`.`id` = `book_authors`.`author_id` LEFT OUTER JOIN `names` ON `names`.`author_id` = `authors`.`id` LIMIT 1
[]
Actual behavior
in Rails 6.0.2.1
Book.left_outer_joins(:book_authors).merge(BookAuthor.left_outer_joins(:author).merge(Author.left_outer_joins(:name)))
(1.8ms) SET NAMES utf8mb4 COLLATE utf8mb4_general_ci, @@SESSION.sql_mode = CONCAT(CONCAT(@@sql_mode, ',STRICT_ALL_TABLES'), ',NO_AUTO_VALUE_ON_ZERO'), @@SESSION.sql_auto_is_null = 0, @@SESSION.wait_timeout = 2147483
Book Exists? (1.9ms) SELECT 1 AS one FROM `books` LEFT OUTER JOIN `book_authors` ON `book_authors`.`book_id` = `books`.`id` LEFT OUTER JOIN `names` ON `names`.`author_id` = `authors`.`id` LEFT OUTER JOIN `authors` ON `authors`.`id` = `book_authors`.`author_id` LIMIT 1
(pry) output error: #<ActiveRecord::StatementInvalid: Mysql2::Error: Unknown column 'authors.id' in 'on clause'>
System configuration
Rails version:
Rails 6.0.2.1
Ruby version:
ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-darwin17]
The join order of tables has been changed in Rails6.
So, An error occurs when trying to use a column from a non-joined table for join.
Steps to reproduce
Expected behavior
in Rails 5.2.4.1
Actual behavior
in Rails 6.0.2.1
System configuration
Rails version:
Rails 6.0.2.1
Ruby version:
ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-darwin17]