mirror of
https://github.com/github/rails.git
synced 2026-04-26 03:00:59 -04:00
Use klass.sti_name to make sure associations take store_full_sti_class into account. [#671 state:resolved]
Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
This commit is contained in:
committed by
Pratik Naik
parent
89ec72c281
commit
c67713a2fe
@@ -1884,7 +1884,7 @@ module ActiveRecord
|
||||
jt_sti_extra = " AND %s.%s = %s" % [
|
||||
connection.quote_table_name(aliased_join_table_name),
|
||||
connection.quote_column_name(through_reflection.active_record.inheritance_column),
|
||||
through_reflection.klass.quote_value(through_reflection.klass.name.demodulize)]
|
||||
through_reflection.klass.quote_value(through_reflection.klass.sti_name)]
|
||||
end
|
||||
when :belongs_to
|
||||
first_key = primary_key
|
||||
@@ -1952,7 +1952,7 @@ module ActiveRecord
|
||||
join << %(AND %s.%s = %s ) % [
|
||||
connection.quote_table_name(aliased_table_name),
|
||||
connection.quote_column_name(klass.inheritance_column),
|
||||
klass.quote_value(klass.name.demodulize)] unless klass.descends_from_active_record?
|
||||
klass.quote_value(klass.sti_name)] unless klass.descends_from_active_record?
|
||||
|
||||
[through_reflection, reflection].each do |ref|
|
||||
join << "AND #{interpolate_sql(sanitize_sql(ref.options[:conditions]))} " if ref && ref.options[:conditions]
|
||||
|
||||
@@ -999,4 +999,22 @@ class HasManyAssociationsTest < ActiveRecord::TestCase
|
||||
assert firm.clients.loaded?
|
||||
end
|
||||
|
||||
def test_joins_with_namespaced_model_should_use_correct_type
|
||||
old = ActiveRecord::Base.store_full_sti_class
|
||||
ActiveRecord::Base.store_full_sti_class = true
|
||||
|
||||
firm = Namespaced::Firm.create({ :name => 'Some Company' })
|
||||
firm.clients.create({ :name => 'Some Client' })
|
||||
|
||||
stats = Namespaced::Firm.find(firm.id, {
|
||||
:select => "#{Namespaced::Firm.table_name}.*, COUNT(#{Namespaced::Client.table_name}.id) AS num_clients",
|
||||
:joins => :clients,
|
||||
:group => "#{Namespaced::Firm.table_name}.id"
|
||||
})
|
||||
assert_equal 1, stats.num_clients.to_i
|
||||
|
||||
ensure
|
||||
ActiveRecord::Base.store_full_sti_class = old
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
@@ -18,6 +18,13 @@ end
|
||||
module Namespaced
|
||||
class Company < ::Company
|
||||
end
|
||||
|
||||
class Firm < ::Company
|
||||
has_many :clients, :class_name => 'Namespaced::Client'
|
||||
end
|
||||
|
||||
class Client < ::Company
|
||||
end
|
||||
end
|
||||
|
||||
class Firm < Company
|
||||
|
||||
Reference in New Issue
Block a user