From 7847fde9e08b0a864a70df6c2fd2b7bca9fe0cca Mon Sep 17 00:00:00 2001 From: Pablo Brasero Date: Thu, 13 Feb 2020 22:26:00 +0000 Subject: [PATCH 1/2] Reproduce the issue --- spec/lib/administrate/order_spec.rb | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/spec/lib/administrate/order_spec.rb b/spec/lib/administrate/order_spec.rb index 33bc27aeff..eca7eda98d 100644 --- a/spec/lib/administrate/order_spec.rb +++ b/spec/lib/administrate/order_spec.rb @@ -73,12 +73,12 @@ context "when relation has belongs_to association" do it "orders by id" do order = Administrate::Order.new(:name) - relation = relation_with_association(:belongs_to) + relation = relation_with_association(:belongs_to, foreign_key: "some_foreign_key") allow(relation).to receive(:reorder).and_return(relation) ordered = order.apply(relation) - expect(relation).to have_received(:reorder).with("name_id asc") + expect(relation).to have_received(:reorder).with("some_foreign_key asc") expect(ordered).to eq(relation) end end @@ -176,9 +176,15 @@ def relation_with_column(column) ) end - def relation_with_association(association) + def relation_with_association(association, foreign_key: "#{association}_id") double( - klass: double(reflect_on_association: double(macro: association)), + klass: double( + reflect_on_association: double( + "#{association}_reflection", + macro: association, + foreign_key: foreign_key, + ), + ), ) end end From 6a215bc48823e754a11624de229b6d2fbd9d6b26 Mon Sep 17 00:00:00 2001 From: Pablo Brasero Date: Thu, 13 Feb 2020 20:46:11 +0000 Subject: [PATCH 2/2] Don't assume the foreign key will be ${FOO}_id --- lib/administrate/order.rb | 6 +++++- spec/lib/administrate/order_spec.rb | 5 ++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/lib/administrate/order.rb b/lib/administrate/order.rb index 4f32da6cd2..25f9d19602 100644 --- a/lib/administrate/order.rb +++ b/lib/administrate/order.rb @@ -62,7 +62,7 @@ def order_by_count(relation) end def order_by_id(relation) - relation.reorder("#{attribute}_id #{direction}") + relation.reorder("#{foreign_key(relation)} #{direction}") end def has_many_attribute?(relation) @@ -76,5 +76,9 @@ def belongs_to_attribute?(relation) def reflect_association(relation) relation.klass.reflect_on_association(attribute.to_s) end + + def foreign_key(relation) + reflect_association(relation).foreign_key + end end end diff --git a/spec/lib/administrate/order_spec.rb b/spec/lib/administrate/order_spec.rb index eca7eda98d..1522e23787 100644 --- a/spec/lib/administrate/order_spec.rb +++ b/spec/lib/administrate/order_spec.rb @@ -73,7 +73,10 @@ context "when relation has belongs_to association" do it "orders by id" do order = Administrate::Order.new(:name) - relation = relation_with_association(:belongs_to, foreign_key: "some_foreign_key") + relation = relation_with_association( + :belongs_to, + foreign_key: "some_foreign_key", + ) allow(relation).to receive(:reorder).and_return(relation) ordered = order.apply(relation)