From 580eefe1bc5d7241a4b2f3ee863523c5b8fd2f80 Mon Sep 17 00:00:00 2001 From: Muhammad Usman Date: Mon, 7 Sep 2020 02:00:02 +0200 Subject: [PATCH] Fix AR signed IDs for STI models Closes #40187. --- activerecord/lib/active_record/signed_id.rb | 2 +- activerecord/test/cases/signed_id_test.rb | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/activerecord/lib/active_record/signed_id.rb b/activerecord/lib/active_record/signed_id.rb index 15d8f8adc8..9f158e419b 100644 --- a/activerecord/lib/active_record/signed_id.rb +++ b/activerecord/lib/active_record/signed_id.rb @@ -90,7 +90,7 @@ def signed_id_verifier=(verifier) # :nodoc: def combine_signed_id_purposes(purpose) - [ name.underscore, purpose.to_s ].compact_blank.join("/") + [ base_class.name.underscore, purpose.to_s ].compact_blank.join("/") end end diff --git a/activerecord/test/cases/signed_id_test.rb b/activerecord/test/cases/signed_id_test.rb index 5ee355fce8..01c483c951 100644 --- a/activerecord/test/cases/signed_id_test.rb +++ b/activerecord/test/cases/signed_id_test.rb @@ -11,7 +11,7 @@ ActiveRecord::Base.signed_id_verifier_secret = SIGNED_ID_VERIFIER_TEST_SECRET class SignedIdTest < ActiveRecord::TestCase - fixtures :accounts, :toys + fixtures :accounts, :toys, :companies setup do @account = Account.first @@ -26,6 +26,10 @@ class SignedIdTest < ActiveRecord::TestCase assert_equal @toy, Toy.find_signed(@toy.signed_id) end + test "find signed record for single table inheritance (STI Models)" do + assert_equal Company.first, Company.find_signed(Company.first.signed_id) + end + test "raise UnknownPrimaryKey when model have no primary key" do error = assert_raises(ActiveRecord::UnknownPrimaryKey) do Matey.find_signed("this will not be even verified") -- GitLab