mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Make sure association preloading works with full STI class name [#465 state:Resolved]
Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
This commit is contained in:
parent
1e0f94a77c
commit
a1fcbd971d
2 changed files with 37 additions and 1 deletions
|
@ -252,7 +252,7 @@ module ActiveRecord
|
||||||
table_name = reflection.klass.quoted_table_name
|
table_name = reflection.klass.quoted_table_name
|
||||||
|
|
||||||
if interface = reflection.options[:as]
|
if interface = reflection.options[:as]
|
||||||
conditions = "#{reflection.klass.quoted_table_name}.#{connection.quote_column_name "#{interface}_id"} IN (?) and #{reflection.klass.quoted_table_name}.#{connection.quote_column_name "#{interface}_type"} = '#{self.base_class.name.demodulize}'"
|
conditions = "#{reflection.klass.quoted_table_name}.#{connection.quote_column_name "#{interface}_id"} IN (?) and #{reflection.klass.quoted_table_name}.#{connection.quote_column_name "#{interface}_type"} = '#{self.base_class.sti_name}'"
|
||||||
else
|
else
|
||||||
foreign_key = reflection.primary_key_name
|
foreign_key = reflection.primary_key_name
|
||||||
conditions = "#{reflection.klass.quoted_table_name}.#{foreign_key} IN (?)"
|
conditions = "#{reflection.klass.quoted_table_name}.#{foreign_key} IN (?)"
|
||||||
|
|
|
@ -0,0 +1,36 @@
|
||||||
|
require 'cases/helper'
|
||||||
|
require 'models/post'
|
||||||
|
require 'models/tagging'
|
||||||
|
|
||||||
|
module Namespaced
|
||||||
|
class Post < ActiveRecord::Base
|
||||||
|
set_table_name 'posts'
|
||||||
|
has_one :tagging, :as => :taggable, :class_name => 'Tagging'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
class EagerLoadIncludeFullStiClassNamesTest < ActiveRecord::TestCase
|
||||||
|
|
||||||
|
def setup
|
||||||
|
generate_test_objects
|
||||||
|
end
|
||||||
|
|
||||||
|
def generate_test_objects
|
||||||
|
post = Namespaced::Post.create( :title => 'Great stuff', :body => 'This is not', :author_id => 1 )
|
||||||
|
tagging = Tagging.create( :taggable => post )
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_class_names
|
||||||
|
old = ActiveRecord::Base.store_full_sti_class
|
||||||
|
|
||||||
|
ActiveRecord::Base.store_full_sti_class = false
|
||||||
|
post = Namespaced::Post.find_by_title( 'Great stuff', :include => :tagging )
|
||||||
|
assert_nil post.tagging
|
||||||
|
|
||||||
|
ActiveRecord::Base.store_full_sti_class = true
|
||||||
|
post = Namespaced::Post.find_by_title( 'Great stuff', :include => :tagging )
|
||||||
|
assert_equal 'Tagging', post.tagging.class.name
|
||||||
|
ensure
|
||||||
|
ActiveRecord::Base.store_full_sti_class = old
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in a new issue