Обработка конфликта версий, когда несколько параллельных редакторов на одной модели рельсов - PullRequest
1 голос
/ 03 февраля 2010

как обрабатывать конфликт версий, когда несколько параллельных редакторов на одной модели рельсов? например пользователь Нажмите кнопку редактирования на контроллере почты и начните редактирование содержимого пользователь B нажмите кнопку редактирования на контроллере записи и начните редактировать заголовок пользователь B закончил и нажми сохранить Пользователь A завершил работу и нажмите «Сохранить» и отмените изменения, сделанные пользователем B

есть, чтобы предотвратить это? Я думаю об использовании поля updated_at, чтобы проверить, что отредактированная версия является последней. любой плагин или драгоценный камень, чтобы сделать это ??

Ответы [ 2 ]

1 голос
/ 03 февраля 2010

Мне неизвестны какие-либо плагины или гемы, которые занимаются этим напрямую (т. Е. Обрабатывают все, от модели до представлений), и кратко искали плагины на gemcutter.org и agilewebdevelopment.com.

Одной из готовящихся программ / пакетов, которая очень хорошо справляется, является Google Wave.

Но если это не вариант (как это почти наверняка не будет), вот быстрая и очень простая идея, которая может привести вас туда:

  1. Добавить поле для представления «edit» с именем «required_at»

  2. Когда вы получаете «обновление» для редактирования, проверьте, меньше ли значение поля формы required_at меньше, чем значение «updated_at» сохраненного объекта.

  3. Если это так, отправьте ответ в браузер, предупреждая пользователя о возможном конфликте. Вы даже можете отобразить разницу между данными пользователя и текущим состоянием сохраненного объекта. Для этого отображения diff я рекомендую библиотеку diff-lcs, доступную на gemcutter: http://gemcutter.org/gems/diff-lcs

  4. После того, как пользователь просмотрит и отредактирует свою подпозицию, промойте и повторите (или дайте им возможность отменить любые существующие изменения, даже если кто-то еще редактировал текст).

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

1 голос
/ 03 февраля 2010

То, что вы ищете, это система контроля версий или контроля версий для ActiveRecord. Ruby Toolbox индексирует несколько из них . vestal_versions laserlemon выглядит так, как будто бы он справился с работой. Я не уверен, что он обрабатывает конфликты версий из коробки, но это можно сделать с помощью форка и некоторого редактирования.

...