2016-09-21 2 views
3

В настоящее время у меня есть приложение Rails, форма редактирования которого находится на отдельной странице редактирования. Есть ли способ удостовериться, что ни один из двух пользователей не одновременно просматривает страницу редактирования? Или пользователь может получить доступ только к странице редактирования, если в настоящий момент на странице нет другого пользователя?Убедитесь, что только один пользователь редактирует форму в приложении Rails

Или задать более простой вопрос, есть ли способ получить список пользователей, находящихся на этой странице?

Я на Rails 4.

+0

просто интересно, будет ли камень для отслеживания пользователей какой-либо помощью в этом сценарии? –

ответ

0

HTTP - протокол без учета состояния. Он был разработан для обеспечения идемпотентных транзакций. Сервер не сохраняет информацию о состоянии транзакции по каждой цепочке запросов. Сеанс позволяет вам смягчить этот шаблон дизайна и позволить серверу отслеживать, где были ваши пользователи. Чтобы узнать, находится ли пользователь на странице, вам необходимо сохранить в своей базе данных, где находится каждый пользователь. Помните, что когда пользователь решает перейти от страницы, ваши серверы не будут знать об этом, только когда запрос будет отправлен на другую страницу.

Я предполагаю, что вам не нужно отслеживать анонимную информацию о сеансе, поэтому вам, вероятно, придется переопределить действие вашего контроллера, которое гарантирует, что пользователи войдут в систему, чтобы сохранить, где находится пользователь. Перед тем, как сделать страницу, убедитесь, что количество текущего местоположения пользователя, равное отображаемой странице, равно 0.

У вас может быть AJAX-огонь на странице, обновляя местоположение вашего пользователя на этих страницах, чтобы вы могли убедиться, что нет пользователя в разумный тайм-аут. Без AJAX вам нужно будет подумать о том, какое разумное количество времени пользователь будет редактировать информацию, и подумайте, что разумная сумма времени, скорее всего, фактическая сумма.

Нет функции RAILS, которая может быть включена, чтобы проверить, где находится пользователь, это будет сворачивать вашу собственную ситуацию.

0

Я думаю, что лучший способ заключается в использовании Redis магазин (или что-нибудь в памяти), или сделать временную таблицу сеансов для этого. Затем вы можете разрешить действие шоу, чтобы проверить, что вы хотите.

Смежные вопросы