Я совершенно новичок в этом и изучаю свои способы. Я создаю приложение чата, и, используя ActionCable, могу указать, что могу транслировать сообщения, и все работает отлично. Теперь я должен показать, что мне нужно показывать пользователям онлайн, вот как далеко я добрался (так что это работает, я пытался реализовать некоторые вещи, но не повезло, это рабочий код):
Я создал новую миграцию:
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, так как у меня уже есть сообщения.
Любые идеи будут великолепны)
Пит