Как настроить одобрение администратором изменений модели
Мне нужна система, в которой обычный пользователь может редактировать модель, но на самом деле редактирование не происходит до тех пор, пока оно не будет одобрено администратором. Я нашел гем под названием paper_trail, который имел версионность модели, но не поддерживает конкретно то, что я хочу сделать. Мне интересно, как другие люди справились с этой проблемой. Я должен добавить, что есть также ассоциации, которые я бы хотел, чтобы пользователь мог редактировать одновременно. Они не очень сложны, например, псевдонимы.
Более сложной частью может быть случай, когда несколько пользователей редактируют одну и ту же модель и пытаются выполнить какое-то слияние.
2 ответа
Один из подходов заключается в создании версий с утверждением версии.
Каждое редактирование создает новую версию объекта модели и его ассоциаций. В любой момент времени существует только одна "текущая" версия любого модельного объекта (и его представление в базе данных).
Если два пользователя представят два отдельных изменения, это приведет к созданию двух "ожидающих" версий.
Администратор одобрил бы изменения, переместив текущую версию в новую "ожидающую" версию. Слияния также могут быть выполнены, но это может быть очень специфично для конкретного домена и может привести к конфликтам, поэтому в любом случае сохранение отдельных версий будет разумным.
Есть несколько способов сделать это, и лучший из них будет зависеть от динамики ситуации.
Я бы рекомендовал посмотреть, как работает Git, и попытаться смоделировать вашу систему после этого. Это своего рода указатель на объект модели HEAD с историей ревизий и возможностью перемещения HEAD в разные ревизии. Слияние может также работать аналогично Git.
Надеюсь, это поможет.
Я смотрю на ту же самую проблему, то есть на утверждение ревизий, я мог столкнуться с этим, я подозреваю, что вы можете сделать что-то подобное с paper_trail.