Skip to content

Commit c21a6d3

Browse files
authored
Merge pull request #75 from clio/fix_base_association_not_sym_bug
Make sure we correctly find the association within preload_scoped_relation method
2 parents 7d1a975 + 95d99bf commit c21a6d3

File tree

4 files changed

+26
-1
lines changed

4 files changed

+26
-1
lines changed

.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -50,3 +50,4 @@ Gemfile.lock
5050

5151
# unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
5252
.rvmrc
53+
.ruby-version

lib/jit_preloader/active_record/base.rb

+2
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ def clear_jit_preloader!
2222
def preload_scoped_relation(name:, base_association:, preload_scope: nil)
2323
return jit_preload_scoped_relations[name] if jit_preload_scoped_relations&.key?(name)
2424

25+
base_association = base_association.to_sym
2526
records = jit_preloader&.records || [self]
2627
previous_association_values = {}
2728

@@ -55,6 +56,7 @@ def preload_scoped_relation(name:, base_association:, preload_scope: nil)
5556
def preload_scoped_relation(name:, base_association:, preload_scope: nil)
5657
return jit_preload_scoped_relations[name] if jit_preload_scoped_relations&.key?(name)
5758

59+
base_association = base_association.to_sym
5860
records = jit_preloader&.records || [self]
5961
previous_association_values = {}
6062

lib/jit_preloader/version.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
module JitPreloader
2-
VERSION = "3.0.0"
2+
VERSION = "3.1.0"
33
end

spec/lib/jit_preloader/active_record/base_spec.rb

+22
Original file line numberDiff line numberDiff line change
@@ -106,5 +106,27 @@ def call(contact)
106106
expect(value).to eq([])
107107
end
108108
end
109+
110+
context "when preload_scoped_relation with string base_association name" do
111+
it "preload properly" do
112+
contacts = Contact.jit_preload.limit(2).to_a
113+
114+
call_with_string = lambda { |contact| contact.preload_scoped_relation(
115+
name: "American Addresses",
116+
base_association: "addresses",
117+
preload_scope: Address.where(country: usa)
118+
) }
119+
120+
usa_addresses = contacts.first.addresses.where(country: usa).to_a
121+
expect do
122+
expect(call_with_string.call(contacts.first)).to match_array usa_addresses
123+
end.to make_database_queries(count: 1)
124+
125+
usa_addresses = contacts.last.addresses.where(country: usa).to_a
126+
expect do
127+
expect(call_with_string.call(contacts.last)).to match_array usa_addresses
128+
end.to_not make_database_queries
129+
end
130+
end
109131
end
110132
end

0 commit comments

Comments
 (0)