instance method connected_to_many

Ruby on Rails edge

Since v6.1.7.10

Available in: v6.1.7.10 v7.0.10 v7.1.6 v7.2.3.2 v8.0.5.1 v8.1.3.1 edge

Signature

connected_to_many(*classes, role:, shard: nil, prevent_writes: role == ActiveRecord.reading_role)

Connects a role and optionally shard to the provided connection names. The prevent_writes option can be passed to block writes on a connection; it defaults to true when using the reading role.

connected_to_many is an alternative to deeply nested connected_to blocks.

Usage:

ActiveRecord::Base.connected_to_many(AnimalsRecord, MealsRecord, role: :reading) do
  Dog.first # Read from animals replica
  Dinner.first # Read from meals replica
  Person.first # Read from primary writer
end

Parameters

classes rest
role keyreq
shard key = nil
prevent_writes key = role == ActiveRecord.reading_role
Source
# File activerecord/lib/active_record/connection_handling.rb, line 173
    def connected_to_many(*classes, role:, shard: nil, prevent_writes: role == ActiveRecord.reading_role)
      classes = classes.flatten

      if self != Base || classes.include?(Base)
        raise NotImplementedError, "connected_to_many can only be called on ActiveRecord::Base."
      end

      if role == ActiveRecord.reading_role && !prevent_writes
        raise ArgumentError, "cannot set `prevent_writes` to false when `role` is `reading`."
      end

      append_to_connected_to_stack(role: role, shard: shard, prevent_writes: prevent_writes, klasses: classes)
      begin
        yield
      ensure
        connected_to_stack.pop
      end
    end

Defined in activerecord/lib/active_record/connection_handling.rb line 173 · View on GitHub · Improve this page · Find usages on GitHub

Defined in ActiveRecord::ConnectionHandling

Type at least 2 characters to search.

Use the arrow keys to navigate results, Enter to open one, Escape to close.

Keyboard shortcuts

/
Focus search
⌘K / Ctrl-K
Command palette
?
This help
Esc
Close