У меня есть несколько forms
, где пользователи могут отправлять данные на утверждение admin
. Как только администратор утверждает только тогда, утвержденные данные создаются / обновляются в реальной таблице.
(например, модель с банковскими реквизитами для пользователя. Как только администратор утверждает только тогда, используются данные). Итак, как структурировать бэкэнд для этого?
Мои первоначальные мысли:
1-й подход
Скажем так, как, например, выше, мы иметь банковскую модель для сохранения банковских реквизитов.
def BankingModel
belongs_to :user
end
Поскольку администратор должен сначала проверить его, он не будет сохранен в банковской модели. Вместо этого я создаю точную копию таблицы, которую предполагается сохранить, и сохраняю ее там изначально
def ProposedBankingModel
belongs_to :user
end
Как только администратор нажмет кнопку, данные будут скопированы в таблицу bankingmodel.
Минусы этого подхода:
Ненужное обслуживание таблицы для каждого table/data
необходимо создать отдельно например, proposed_some_table
для каждой модели, которую нужно изменить
У меня такое ощущение, что это немного излишне
2-й подход
Здесь будет использоваться только одна модель. Таким образом, в соответствии с примером при отправке нового создания / обновления записи запрошенные данные будут сохранены на самой модели service_request.
def service_request
id: db_table_id,
request_model: banking_model// decides which model its for, here its banking model
requested_data:jsonb//contains data as json,
status: pending#shows approval status
end
Здесь тип запроса будет определять, какую модель обновлять и утверждать с помощью admin json
из service_request будет использоваться для заполнения модели request_type, здесь BankingModel
.
Я нашел второй подход лучше. но мне нужно вручную l oop через json для каждого поля после подтверждения обновления в реальной таблице. Но я думаю, что я могу структурировать jsonb точно на основе типа requestmodel
перед сохранением, чтобы он мог искать :key :value
для каждого поля таблицы.
Правильно ли идет направление? Какие-либо предложения?
Также есть библиотека для рельсов, чтобы мне не пришлось изобретать велосипед? Спасибо