Текущий пользовательский контекст при отправке сообщения действия кабеля - PullRequest
0 голосов
/ 31 мая 2018

У меня есть приложение rails с REST API, созданное с использованием активной модели сериализатора.

Чтобы упростить задачу - скажем, у меня есть сериализатор Post, который возвращает title сообщения и is_voted со значением true или false в зависимости от того, вошел ли пользователь в систему и проголосовал за него.эта история или нет.

  attribute :is_voted do
    voteable_ids = current_user.account.votes.where(voteable_type: 'Post').map(&:voteable_id)

    voteable_ids.include? object.id
  end

И пока все прекрасно работает, но все становится сложнее, когда я хочу уведомить клиента javascript об изменениях в записи Post.

Допустим, название изменилось, и я хочуотправить событие actioncable об этом:

ActionCable.server.broadcast 'updates_channel', {
  event: 'posts.updated',
  data: ActiveModelSerializers::SerializableResource.new(post).to_json
}

Дело в том, что при отправке такого события я не знаю, что такое current_user на данный момент, так как оно вызывается бэкэндом.Или в принципе может быть вызван другим пользователем.Но если я правильно понимаю, конечная точка actioncable знает, кто такой current_user, так что теоретически это можно было бы сделать.

Я думал - возможно ли как-то внедрить current_user в этот сериализатор в некоторыхсвоего рода промежуточное программное обеспечение actioncable?Я могу аутентифицировать пользователей на моей конечной точке кабеля действия, используя identified_by :current_user, но я не знаю, как использовать его в этом сценарии.

Другая идея - просто отправить событие об обновлении сообщения только с идентификатором записи.Позже, на стороне JS, я могу просто получить этот конкретный пост с использованием обычного API REST и обновить представление - но это звучит как супер неоптимальное решение.

...