提交 ec118073 编写于 作者: J José Valim

Deprecate use of string in establish_connection as connection lookup

上级 d2ed433b
* Deprecated use of string argument as a configuration lookup in `ActiveRecord::Base.establish_connection`. Instead, a symbol must be given.
*José Valim*
* Fixed `update_column`, `update_columns`, and `update_all` to correctly serialize
values for `array`, `hstore` and `json` column types in PostgreSQL.
......
......@@ -26,7 +26,7 @@ def resolve(config)
if config
resolve_connection config
elsif defined?(Rails.env)
resolve_env_connection Rails.env
resolve_env_connection Rails.env.to_sym
else
raise AdapterNotSpecified
end
......@@ -55,7 +55,7 @@ def spec(config)
def resolve_connection(spec) #:nodoc:
case spec
when Symbol, String
resolve_env_connection spec.to_s
resolve_env_connection spec
when Hash
resolve_hash_connection spec
end
......@@ -63,14 +63,21 @@ def resolve_connection(spec) #:nodoc:
def resolve_env_connection(spec) # :nodoc:
# Rails has historically accepted a string to mean either
# an environment key or a url spec. So we support both for
# now but it would be nice to limit the environment key only
# for symbols.
config = configurations.fetch(spec.to_s) do
resolve_string_connection(spec) if spec.is_a?(String)
# an environment key or a url spec, so we have deprecated
# this ambiguous behaviour and in the future this function
# can be removed in favor of resolve_string_connection and
# resolve_symbol_connection.
if config = configurations[spec.to_s]
if spec.is_a?(String)
ActiveSupport::Deprecation.warn "Passing a string to ActiveRecord::Base.establish_connection " \
"for a configuration lookup is deprecated, please pass a symbol (#{spec.to_sym.inspect}) instead"
end
resolve_connection(config)
elsif spec.is_a?(String)
resolve_string_connection(spec)
else
raise(AdapterNotSpecified, "#{spec} database is not configured")
end
raise(AdapterNotSpecified, "#{spec} database is not configured") unless config
resolve_connection(config)
end
def resolve_hash_connection(spec) # :nodoc:
......
......@@ -32,6 +32,13 @@ module ConnectionHandling
# "postgres://myuser:mypass@localhost/somedatabase"
# )
#
# In case <tt>ActiveRecord::Base.configurations</tt> is set (Rails
# automatically loads the contents of config/database.yml into it),
# a symbol can also be given as argument, representing a key in the
# configuration hash:
#
# ActiveRecord::Base.establish_connection(:production)
#
# The exceptions AdapterNotSpecified, AdapterNotFound and ArgumentError
# may be returned on an error.
def establish_connection(spec = ENV["DATABASE_URL"])
......
......@@ -191,7 +191,7 @@ class Klass < ActiveRecord::Base
end
def setup
Klass.establish_connection 'arunit'
Klass.establish_connection :arunit
@connection = Klass.connection
end
......
......@@ -101,7 +101,7 @@ def test_associations_should_work_when_model_has_no_connection
College.first.courses.first
end
ensure
ActiveRecord::Base.establish_connection 'arunit'
ActiveRecord::Base.establish_connection :arunit
end
end
end
......
......@@ -28,8 +28,8 @@ class Tag2 < ActiveRecord::Base
end
setup do
Tag.establish_connection 'arunit'
Tag2.establish_connection 'arunit'
Tag.establish_connection :arunit
Tag2.establish_connection :arunit
Tag.destroy_all
end
......
......@@ -15,7 +15,7 @@ def self.connect
puts "Using #{connection_name}"
ActiveRecord::Base.logger = ActiveSupport::Logger.new("debug.log", 0, 100 * 1024 * 1024)
ActiveRecord::Base.configurations = connection_config
ActiveRecord::Base.establish_connection 'arunit'
ARUnit2Model.establish_connection 'arunit2'
ActiveRecord::Base.establish_connection :arunit
ARUnit2Model.establish_connection :arunit2
end
end
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册