1
0
Fork 0
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:
Carlos Antonio da Silva 2014-06-04 07:55:59 -03:00
commit c5c0bad190
4 changed files with 27 additions and 2 deletions

View file

@ -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*

View file

@ -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)

View file

@ -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

View file

@ -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