Rails — Отправлять оповещение другому пользователю, когда им назначается новый клиент (без обновления их страницы)

#javascript #ruby-on-rails

#javascript #ruby-on-rails

Вопрос:

У меня есть модель пользователя, использующая devise и модель трейдера. Я хочу отправлять всплывающее сообщение или оповещение пользователям всякий раз, когда им назначается новый трейдер.

Менеджеры могут назначать трейдеров пользователям, поэтому процесс назначения выполняется другим пользователем, а не пользователем, получающим нового трейдера.

Как заставить действие менеджера «назначить» отправлять оповещение конкретному пользователю, которому назначен новый трейдер? Они войдут в систему, но я не хочу, чтобы им приходилось обновлять свою страницу

Назначить метод в traders_controller.rb

 if @trader.save
  // Send alert to user if @trader.user == current_user 
  flash[:notice] = "Successfully created trader." // flash message for manager
  redirect_to traders_path
  return
else
  render :new
  return
end
  

Комментарии:

1. Какая версия Rails?

2. @aridlehoover Я использую Rails 5

Ответ №1:

Вам нужно использовать сокет, чтобы отправить новую информацию соответствующему клиенту. Если вы используете Rails 5, вы можете использовать ActionCable. Вы захотите подписаться на пользователя на определенный для него канал, а затем опубликовать информацию на этом канале, чтобы обновить пользователя. Конечно, ваш интерфейс должен знать, что делать с данными.

https://guides.rubyonrails.org/action_cable_overview.html#client-server-interactions-subscriptions

Если вы используете более старую версию Rails, взгляните на эту статью:

https://medium.freecodecamp.org/implementing-web-sockets-in-a-rails-4-fb45696f8d8c .

Комментарии:

1. Отличный ответ. Альтернативой этому может быть интеграция со службой, которая может обрабатывать сложные части за вас. Я использовал pusher.com в прошлом и был вполне доволен этим. Вы также могли бы реализовать опрос на стороне клиента, проверяя наличие сообщений с некоторым интервалом, но это довольно расточительно для ресурсов клиента и сервера, но хорошее быстрое решение, для обработки которого вам не нужна дополнительная инфраструктура.