Ruby/Rails Как ограничить количество сообщений, которые пользователь мог видеть другими пользователями?
Я работаю над приложением Ruby/Rails, в котором я хочу, чтобы только один пользователь мог видеть один пост за раз всем остальным пользователям. Все пользователи могут видеть все сообщения других пользователей, но только один пост. Какой самый простой способ сделать это?
Это будет на канале, доступном для всех пользователей.
Цель состоит в том, чтобы ни у одного пользователя не было более одного поста в основной ленте. Поэтому, когда они публикуют новое сообщение, оно удаляет предыдущее сообщение из общего канала.
2 ответа
Похоже, у вас должна быть какая-то простая система "проверки" для поста. Когда любой пользователь просматривает определенный пост, он автоматически "проверяет" этот пост, и никто другой не может его увидеть. Сложная часть, как мне кажется, проверяет этот пост обратно. Откуда вы знаете, когда кто-то заканчивает просмотр поста? Один достаточно верный способ заключается в том, что пользователь переходит на другую страницу, но это не единственный способ, и то, что кто-то переходит на новую страницу, не означает, что он не оставил исходное сообщение открытым на другой вкладке. А что, если пользователь, просматривающий запись, просто встает и уходит с компьютера на день, а публика все еще активна? Или что, если они оставят сообщение открытым, но перейдут к другим действиям по просмотру?
Похоже, вам может понадобиться способ "истечения срока действия" для каждой проверки через определенный промежуток времени, и, возможно, пользователь, просматривающий публикацию, может "обновить" публикацию, когда истекает срок их проверки.
Тогда, очевидно, вы позволяете пользователю просматривать конкретное сообщение, только если оно еще не проверено кем-то другим.
Я с радостью поделюсь идеями о том, как реализовать такую систему, но я оставлю это на потом, если у кого-то еще будет лучшая концептуальная идея или если я полностью неправильно понял ваш вопрос.
Вы можете добавить атрибуты post_id и post_viewed_at в запись пользователя и попытаться поддерживать их в актуальном состоянии.
Но есть пара угловых случаев, когда это может вызвать проблемы:
- когда пользователь закрывает окно браузера
- когда пользователь уходит с помощью кнопки назад или набрав другой URL
Вам потребуется JavaScript, чтобы убедиться, что атрибуты post_id и post_viewed_at обнуляются, когда пользователь уходит или закрывает окно.
Используя отметку времени post_viewed_at, вы также можете реализовать время истечения в случае, если есть сценарии, в которых вы не заметили, что пользователь ушел.
Другая проблема заключается в том, что это может вызвать довольно много транзакций базы данных для сайта с большим количеством пользователей.