diff --git a/lib/rails_admin/adapters/active_record/abstract_object.rb b/lib/rails_admin/adapters/active_record/abstract_object.rb index c8f4db5b23..cd9a98cbc0 100644 --- a/lib/rails_admin/adapters/active_record/abstract_object.rb +++ b/lib/rails_admin/adapters/active_record/abstract_object.rb @@ -23,8 +23,14 @@ def save(options = {validate: true}) object.save(**options) end - def method_missing(method_name, *args, &block) - object.send(method_name, *args, &block) + if RUBY_VERSION >= '2.7' + def method_missing(method_name, *args, **kwargs, &block) + object.send(method_name, *args, **kwargs, &block) + end + else + def method_missing(method_name, *args, &block) + object.send(method_name, *args, &block) + end end end end diff --git a/spec/rails_admin/adapters/active_record/abstract_object_spec.rb b/spec/rails_admin/adapters/active_record/abstract_object_spec.rb index 5c859cc8da..ebf9300769 100644 --- a/spec/rails_admin/adapters/active_record/abstract_object_spec.rb +++ b/spec/rails_admin/adapters/active_record/abstract_object_spec.rb @@ -9,6 +9,14 @@ expect(object).to receive(:method_call) abstract_object.method_call end + + context 'when the method of underlying object receives keyword arguments' do + let(:object) { Class.new { def foo(bar: 1); end }.new } + + it 'does not break on proxying' do + expect { abstract_object.foo(bar: 2) }.not_to raise_error + end + end end describe 'create' do