diff options
Diffstat (limited to 'activerecord/lib')
-rw-r--r-- | activerecord/lib/active_record/connection_handling.rb | 22 | ||||
-rw-r--r-- | activerecord/lib/active_record/locking/pessimistic.rb | 6 | ||||
-rw-r--r-- | activerecord/lib/active_record/persistence.rb | 1 |
3 files changed, 17 insertions, 12 deletions
diff --git a/activerecord/lib/active_record/connection_handling.rb b/activerecord/lib/active_record/connection_handling.rb index e3b59b8a22..777cb8a402 100644 --- a/activerecord/lib/active_record/connection_handling.rb +++ b/activerecord/lib/active_record/connection_handling.rb @@ -109,15 +109,19 @@ module ActiveRecord if database && role raise ArgumentError, "connected_to can only accept a database or role argument, but not both arguments." elsif database - database = { database => database } if database.is_a?(Symbol) - database.each do |role, database_key| - config_hash = resolve_config_for_connection(database_key) - handler = lookup_connection_handler(role.to_sym) - - with_handler(role.to_sym) do - handler.establish_connection(config_hash) - return yield - end + if database.is_a?(Hash) + role, database = database.first + role = role.to_sym + else + role = database.to_sym + end + + config_hash = resolve_config_for_connection(database) + handler = lookup_connection_handler(role) + + with_handler(role) do + handler.establish_connection(config_hash) + yield end elsif role with_handler(role.to_sym, &blk) diff --git a/activerecord/lib/active_record/locking/pessimistic.rb b/activerecord/lib/active_record/locking/pessimistic.rb index 5d1d15c94d..130ef8a330 100644 --- a/activerecord/lib/active_record/locking/pessimistic.rb +++ b/activerecord/lib/active_record/locking/pessimistic.rb @@ -14,9 +14,9 @@ module ActiveRecord # of your own such as 'LOCK IN SHARE MODE' or 'FOR UPDATE NOWAIT'. Example: # # Account.transaction do - # # select * from accounts where name = 'shugo' limit 1 for update - # shugo = Account.where("name = 'shugo'").lock(true).first - # yuko = Account.where("name = 'yuko'").lock(true).first + # # select * from accounts where name = 'shugo' limit 1 for update nowait + # shugo = Account.lock("FOR UPDATE NOWAIT").find_by(name: "shugo") + # yuko = Account.lock("FOR UPDATE NOWAIT").find_by(name: "yuko") # shugo.balance -= 100 # shugo.save! # yuko.balance += 100 diff --git a/activerecord/lib/active_record/persistence.rb b/activerecord/lib/active_record/persistence.rb index f991a3076e..7bf8d568df 100644 --- a/activerecord/lib/active_record/persistence.rb +++ b/activerecord/lib/active_record/persistence.rb @@ -479,6 +479,7 @@ module ActiveRecord verify_readonly_attribute(key.to_s) end + id_in_database = self.id_in_database attributes.each do |k, v| write_attribute_without_type_cast(k, v) end |