mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Merge pull request #15482 from laurocaetano/fix-regression-for-eager-load
Fix regression on eager loading association based on SQL query rather than existing column. Conflicts: activerecord/CHANGELOG.md
This commit is contained in:
commit
c5c0bad190
4 changed files with 27 additions and 2 deletions
|
@ -1,3 +1,10 @@
|
|||
* Fix regression on eager loading association based on SQL query rather than
|
||||
existing column.
|
||||
|
||||
Fixes #15480.
|
||||
|
||||
*Lauro Caetano*, *Carlos Antonio da Silva*
|
||||
|
||||
* Return a null column from `column_for_attribute` when no column exists.
|
||||
|
||||
*Sean Griffin*
|
||||
|
|
|
@ -104,11 +104,13 @@ module ActiveRecord
|
|||
end
|
||||
|
||||
def association_key_type
|
||||
@klass.column_types[association_key_name.to_s].type
|
||||
column = @klass.column_types[association_key_name.to_s]
|
||||
column && column.type
|
||||
end
|
||||
|
||||
def owner_key_type
|
||||
@model.column_types[owner_key_name.to_s].type
|
||||
column = @model.column_types[owner_key_name.to_s]
|
||||
column && column.type
|
||||
end
|
||||
|
||||
def load_slices(slices)
|
||||
|
|
|
@ -1239,6 +1239,10 @@ class EagerAssociationTest < ActiveRecord::TestCase
|
|||
}
|
||||
end
|
||||
|
||||
test "including association based on sql condition and no database column" do
|
||||
assert_equal pets(:parrot), Owner.including_last_pet.first.last_pet
|
||||
end
|
||||
|
||||
test "include instance dependent associations is deprecated" do
|
||||
message = "association scope 'posts_with_signature' is"
|
||||
assert_deprecated message do
|
||||
|
|
|
@ -3,6 +3,18 @@ class Owner < ActiveRecord::Base
|
|||
has_many :pets, -> { order 'pets.name desc' }
|
||||
has_many :toys, :through => :pets
|
||||
|
||||
belongs_to :last_pet, class_name: 'Pet'
|
||||
scope :including_last_pet, -> {
|
||||
select(%q[
|
||||
owners.*, (
|
||||
select p.pet_id from pets p
|
||||
where p.owner_id = owners.owner_id
|
||||
order by p.name desc
|
||||
limit 1
|
||||
) as last_pet_id
|
||||
]).includes(:last_pet)
|
||||
}
|
||||
|
||||
after_commit :execute_blocks
|
||||
|
||||
def blocks
|
||||
|
|
Loading…
Reference in a new issue