Мне неизвестны какие-либо плагины или гемы, которые занимаются этим напрямую (т. Е. Обрабатывают все, от модели до представлений), и кратко искали плагины на gemcutter.org и agilewebdevelopment.com.
Одной из готовящихся программ / пакетов, которая очень хорошо справляется, является Google Wave.
Но если это не вариант (как это почти наверняка не будет), вот быстрая и очень простая идея, которая может привести вас туда:
Добавить поле для представления «edit» с именем «required_at»
Когда вы получаете «обновление» для редактирования, проверьте, меньше ли значение поля формы required_at меньше, чем значение «updated_at» сохраненного объекта.
Если это так, отправьте ответ в браузер, предупреждая пользователя о возможном конфликте. Вы даже можете отобразить разницу между данными пользователя и текущим состоянием сохраненного объекта. Для этого отображения diff я рекомендую библиотеку diff-lcs, доступную на gemcutter: http://gemcutter.org/gems/diff-lcs
После того, как пользователь просмотрит и отредактирует свою подпозицию, промойте и повторите (или дайте им возможность отменить любые существующие изменения, даже если кто-то еще редактировал текст).
В приведенном ниже ответе упоминается использование версий для ваших моделей active_record, и для этого вы можете попробовать ActsAsAudited (по крайней мере, это мое любимое) ... но я не уверен, что эту проблему вы описывали.