#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 в прошлом и был вполне доволен этим. Вы также могли бы реализовать опрос на стороне клиента, проверяя наличие сообщений с некоторым интервалом, но это довольно расточительно для ресурсов клиента и сервера, но хорошее быстрое решение, для обработки которого вам не нужна дополнительная инфраструктура.