Как настроить одобрение администратором изменений модели

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

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

2 ответа

Один из подходов заключается в создании версий с утверждением версии.

Каждое редактирование создает новую версию объекта модели и его ассоциаций. В любой момент времени существует только одна "текущая" версия любого модельного объекта (и его представление в базе данных).

Если два пользователя представят два отдельных изменения, это приведет к созданию двух "ожидающих" версий.

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

Есть несколько способов сделать это, и лучший из них будет зависеть от динамики ситуации.

Я бы рекомендовал посмотреть, как работает Git, и попытаться смоделировать вашу систему после этого. Это своего рода указатель на объект модели HEAD с историей ревизий и возможностью перемещения HEAD в разные ревизии. Слияние может также работать аналогично Git.

Надеюсь, это поможет.

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

Другие вопросы по тегам