Непонимание первого примера в Rails 'Guide for action cable - PullRequest
0 голосов
/ 18 апреля 2019

Я пытаюсь добавить пример «Внешний вид пользователя» (из руководства Rails: https://guides.rubyonrails.org/action_cable_overview.html#example-1-user-appearances) в мое приложение, но я не понимаю эту часть:

# app/channels/appearance_channel.rb
class AppearanceChannel < ApplicationCable::Channel
  def subscribed
    current_user.appear
  end

  def unsubscribed
    current_user.disappear
  end

  def appear(data)
    current_user.appear(on: data['appearing_on'])
  end

  def away
    current_user.away
  end
end

Если у кого-то есть объяснение следующему предложению: « Этот появляющийся / исчезающий API может быть поддержан Redis, базой данных или чем-то еще. » (чуть выше этой части кода в Rails ' Guide).

Я пробую несколько вариантов, так как добавление метода «появляются» в моей модели «Пользователь», который изменяет «истинное» значение базы данных из моей модели «Пользователь», но подписанное определение вызывает current_user.appear, а затем определение определения вызывает current_user.appear (with_param) создает конфликт ...

Возможно, есть кое-что, чего я не понимаю, но я не вижу точно, что это ...

Большое спасибо за ваши ответы.

1 Ответ

1 голос
/ 18 апреля 2019

Предложение о «появлении / исчезновении поддержки API» - означает, что ActionCable не заботится о том, где и как вы храните и обрабатываете статусы пользователей - вы можете хранить только один или несколько данных в базе данных (например, последний посещенный чат, последний посещенный).время и т. д.), вы можете хранить аналогичные данные в Redis или любом другом месте, которое вам нравится.

(un)subscribed методы вызываются самим ActionCable при подключении пользователя к этому каналу (обычно это происходит при загрузке страницы).и после перемещения / закрытия - и когда страница открыта в браузере, это не обязательно означает, что пользователь фактически находится рядом со своим устройством), в то время как appear / away - это действия, которые вызываются из js на стороне клиента посредством вызова perform("action_name_here") onканал.Пример предполагает, что клиентский код будет обнаруживать присутствие пользователя и отправлять обновления.

...