From 22a1265828d9f743b8348fe53424fffb60d6d824 Mon Sep 17 00:00:00 2001 From: Eileen Uchitelle Date: Wed, 19 Dec 2018 15:11:22 -0500 Subject: Raise helpful error when role doesn't exist If you try to call `connected_to` with a role that doesn't have an established connection you used to get an error that said: ``` >> ActiveRecord::Base.connected_to(role: :i_dont_exist) { Home.first } ActiveRecord::ConnectionNotEstablished Exception: No connection pool with 'primary' found. ``` This is confusing because the connection could be established but we spelled the role wrong. I've changed this to raise if the `role` used in `connected_to` doesn't have an associated handler. Users who encounter this should either check that the role is spelled correctly (writin -> writing), establish a connection to that role in the model with connects_to, or use the `database` keyword for the `role`. I think this will provide a less confusing error message for those starting out with multiple databases. --- activerecord/lib/active_record/connection_handling.rb | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'activerecord/lib') diff --git a/activerecord/lib/active_record/connection_handling.rb b/activerecord/lib/active_record/connection_handling.rb index 558cdeccf2..4a941055d1 100644 --- a/activerecord/lib/active_record/connection_handling.rb +++ b/activerecord/lib/active_record/connection_handling.rb @@ -158,6 +158,10 @@ module ActiveRecord end def with_handler(handler_key, &blk) # :nodoc: + unless ActiveRecord::Base.connection_handlers.keys.include?(handler_key) + raise ArgumentError, "The #{handler_key} role does not exist. Add it by establishing a connection with `connects_to` or use an existing role (#{ActiveRecord::Base.connection_handlers.keys.join(", ")})." + end + handler = lookup_connection_handler(handler_key) swap_connection_handler(handler, &blk) end -- cgit v1.2.3