From dec8307ae5886169e7a0fa89e18e20159b04d126 Mon Sep 17 00:00:00 2001 From: Alexey Vasiliev Date: Sat, 14 Sep 2024 10:09:23 +0300 Subject: [PATCH] improve handling for aliases --- lib/ransack/nodes/grouping.rb | 12 ++++-------- spec/ransack/adapters/active_record/base_spec.rb | 15 +++++++++++++-- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/lib/ransack/nodes/grouping.rb b/lib/ransack/nodes/grouping.rb index 57d12d90..0512219b 100644 --- a/lib/ransack/nodes/grouping.rb +++ b/lib/ransack/nodes/grouping.rb @@ -50,24 +50,20 @@ def conditions=(conditions) def [](key) conditions.detect do |c| - matched_condition(c, key.to_s, named_condition?(key.to_s)) + matched_condition(c, key) end end def []=(key, value) conditions.reject! do |c| - matched_condition(c, key.to_s, named_condition?(key.to_s)) + matched_condition(c, key) end self.conditions << value end - def matched_condition(c, key, named = false) - named ? c.name == key : c.key == key - end - - def named_condition?(key) - conditions.map(&:name).include?(key) + def matched_condition(c, key) + c.name == key.to_s end def values diff --git a/spec/ransack/adapters/active_record/base_spec.rb b/spec/ransack/adapters/active_record/base_spec.rb index e80ba5e2..89bb9444 100644 --- a/spec/ransack/adapters/active_record/base_spec.rb +++ b/spec/ransack/adapters/active_record/base_spec.rb @@ -242,11 +242,22 @@ module ActiveRecord it 'return alias correctly from search' do s = Person.ransack(term_cont: 'atlo') expect(s.term_cont).to eq 'atlo' - expect(s.name_or_email_cont).to eq 'atlo' + expect(s.name_or_email_cont).to eq nil s = Person.ransack(daddy_cont: 'babi') expect(s.daddy_cont).to eq 'babi' - expect(s.parent_name_cont).to eq 'babi' + expect(s.parent_name_cont).to eq nil + + s = Person.ransack( + term_cont: 'atlo', + name_or_email_cont: 'different' + ) + expect(s.term_cont).to eq 'atlo' + expect(s.name_or_email_cont).to eq 'different' + expect(s.result.to_sql).to include('"people"."name" LIKE \'%different%\'') + expect(s.result.to_sql).to include('"people"."email" LIKE \'%different%\'') + expect(s.result.to_sql).to include('"people"."name" LIKE \'%atlo%\'') + expect(s.result.to_sql).to include('"people"."email" LIKE \'%atlo%\'') end it 'also works with associations' do