Rails, показывая пользователям онлайн в прямом эфире, используя кабель Action - PullRequest
0 голосов
/ 23 апреля 2020

Я совершенно новичок в этом и изучаю свои способы. Я создаю приложение чата, и, используя ActionCable, могу указать, что могу транслировать сообщения, и все работает отлично. Теперь я должен показать, что мне нужно показывать пользователям онлайн, вот как далеко я добрался (так что это работает, я пытался реализовать некоторые вещи, но не повезло, это рабочий код):

  1. Я создал новую миграцию:

    rails g migration add_last_seen_at_to_users last_seen_at:datetime

, затем запустил rails db:migrate

в application_controller.rb я добавил следующее:
      before_action :update_last_seen_at, if: -> { logged_in? && (current_user.last_seen_at.nil? || current_user.last_seen_at < 2.minutes.ago) }

      def update_last_seen_at
        current_user.update_attribute(:last_seen_at, Time.current)
      end
затем в chatrooms_controller.rb я добавил это в определение индекса:
    def index
        @users = User.all
        @online_users = User.where("last_seen_at > ?", 2.minutes.ago)
      end
И в .. \ views \ chatrooms \ index. html .erb столбец моих пользователей выглядит следующим образом (я нахожусь на Semanti c UI здесь):
    <div class="four wide column">
        <div class="ui fluid raised card chatbox">
          <div class="content">
            <% @online_users.each do |user| %>
              <div class="ui inverted vertical menu">
                <a class="item">
                <%= user.username %>
                </a>
              </div>
            <% end %>
          </div>
        </div>
      </div>
В качестве бонуса я могу добавить, когда пользователя видели в последний раз, если вы используете что-то подобное (но мне это сейчас не нужно, я буду использовать его в профилях пользователей):
    <% @users.each do |user| %>
    <% user.last_seen_at.nil? ? "Never signed in" : time_ago_in_words(user.last_seen_at) %>
    <% end %>

Таким образом, он показывает мне пользователей онлайн, если они не активны в течение 2 минут, они исчезают из списка, даже если они все еще остаются в системе, так что это больше похоже на то, что пользователи "активны". Нечто подобное может помочь мне решить проблему, когда пользователь закрывает окно браузера. Единственная проблема здесь в том, что это не происходит вживую и появляется только после обновления страницы sh, сейчас я над этим работаю, думаю, какой-то похожий код, используемый для трансляции сообщений с помощью ActionCable, должен помочь, но я немного застрял. Я использую ActionCable, так как у меня уже есть сообщения.

Любые идеи будут великолепны)

Пит

...