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 выглядит следующим образом сверху вниз:
- Соединение: каждый пользователь имеет (как минимум) одно соединение (AFAIK одно соединение на окно / вкладку)
- Канал: может быть столько разных каналов, сколько вы хотите создать (например, appearances_channel и web_notifications_channel)
- Комната: каждый канал может иметь несколько комнат. Комнаты как экземпляры канала
Что касается слова "делегат": оно относится к распространенной практике Ruby, называемой делегированием.
Надеюсь, это помогло!:)