ActionCable: значение делегата в документации по Ruby on Rails.

В документации, разделе "Соединение" Руководства по Ruby on Rails для Action Cable, используется слово "делегат", и я не знаю, что они означают. Вот код, на который они ссылаются в разделе:

# app/channels/application_cable/connection.rb
module ApplicationCable
  class Connection < ActionCable::Connection::Base

  identified_by :current_user

  def connect
    self.current_user = find_verified_user
  end

  private
    def find_verified_user
      if current_user = User.find_by(id: cookies.signed[:user_id])
        current_user
      else
        reject_unauthorized_connection
      end
    end
 end
end

Вот объяснение, где дано объяснение:

Здесь identif_by - это идентификатор соединения, который может быть использован для нахождения конкретного соединения позже. Обратите внимание, что все, что помечено как идентификатор, автоматически создает делегата с тем же именем в любых экземплярах канала, созданных вне соединения.

Когда они говорят от связи, они имеют в виду, что слово current_user будет ссылаться на одного и того же клиента в совершенно другом соединении?

1 ответ

Нет, насколько я понимаю, это означает, что все экземпляры канала, созданные на этом конкретном соединении, также могут быть идентифицированы (доступны) одним и тем же объектом current_user. Один и тот же пользователь может иметь несколько соединений, и в этом случае объекты current_user в обоих соединениях будут ссылаться на одного и того же пользователя, но обычно current_user ссылается на ранее аутентифицированного пользователя сеанса.

Иерархия ActionCable выглядит следующим образом сверху вниз:

  1. Соединение: каждый пользователь имеет (как минимум) одно соединение (AFAIK одно соединение на окно / вкладку)
  2. Канал: может быть столько разных каналов, сколько вы хотите создать (например, appearances_channel и web_notifications_channel)
  3. Комната: каждый канал может иметь несколько комнат. Комнаты как экземпляры канала

Что касается слова "делегат": оно относится к распространенной практике Ruby, называемой делегированием.

Надеюсь, это помогло!:)

Другие вопросы по тегам