diff --git a/.gitignore b/.gitignore index 02bf1a4..36431d0 100644 --- a/.gitignore +++ b/.gitignore @@ -50,3 +50,4 @@ Gemfile.lock # unless supporting rvm < 1.11.0 or doing something fancy, ignore this: .rvmrc +.ruby-version \ No newline at end of file diff --git a/lib/jit_preloader/active_record/base.rb b/lib/jit_preloader/active_record/base.rb index d941881..c9ea1b1 100644 --- a/lib/jit_preloader/active_record/base.rb +++ b/lib/jit_preloader/active_record/base.rb @@ -22,6 +22,7 @@ def clear_jit_preloader! def preload_scoped_relation(name:, base_association:, preload_scope: nil) return jit_preload_scoped_relations[name] if jit_preload_scoped_relations&.key?(name) + base_association = base_association.to_sym records = jit_preloader&.records || [self] previous_association_values = {} @@ -55,6 +56,7 @@ def preload_scoped_relation(name:, base_association:, preload_scope: nil) def preload_scoped_relation(name:, base_association:, preload_scope: nil) return jit_preload_scoped_relations[name] if jit_preload_scoped_relations&.key?(name) + base_association = base_association.to_sym records = jit_preloader&.records || [self] previous_association_values = {} diff --git a/lib/jit_preloader/version.rb b/lib/jit_preloader/version.rb index ee6b908..f201357 100644 --- a/lib/jit_preloader/version.rb +++ b/lib/jit_preloader/version.rb @@ -1,3 +1,3 @@ module JitPreloader - VERSION = "3.0.0" + VERSION = "3.1.0" end diff --git a/spec/lib/jit_preloader/active_record/base_spec.rb b/spec/lib/jit_preloader/active_record/base_spec.rb index a032350..7e47afa 100644 --- a/spec/lib/jit_preloader/active_record/base_spec.rb +++ b/spec/lib/jit_preloader/active_record/base_spec.rb @@ -106,5 +106,27 @@ def call(contact) expect(value).to eq([]) end end + + context "when preload_scoped_relation with string base_association name" do + it "preload properly" do + contacts = Contact.jit_preload.limit(2).to_a + + call_with_string = lambda { |contact| contact.preload_scoped_relation( + name: "American Addresses", + base_association: "addresses", + preload_scope: Address.where(country: usa) + ) } + + usa_addresses = contacts.first.addresses.where(country: usa).to_a + expect do + expect(call_with_string.call(contacts.first)).to match_array usa_addresses + end.to make_database_queries(count: 1) + + usa_addresses = contacts.last.addresses.where(country: usa).to_a + expect do + expect(call_with_string.call(contacts.last)).to match_array usa_addresses + end.to_not make_database_queries + end + end end end