Разработка модели в рельсах, которую необходимо проверить перед обновлением / созданием - PullRequest
0 голосов
/ 07 февраля 2020

У меня есть несколько 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 для каждого поля таблицы.

Правильно ли идет направление? Какие-либо предложения?

Также есть библиотека для рельсов, чтобы мне не пришлось изобретать велосипед? Спасибо

1 Ответ

0 голосов
/ 08 февраля 2020

Самый простой способ - просто добавить ActiveRecord::Enum к модели:

class AddStatusToBankingModel < ActiveRecord::Migration[6.0]
  def change
    add_column :banking_models, :status, :integer, default: 0, index: true
  end
end

Примечание default: 0.

class BankingModel
  enum status: {
    0: :pending,
    1: :approved,
    2: :on_hold # just an example
  }
end

После этого вы можете утвердить запись звонить record.approved! или record.update(status: :approved). Что касается остальной части вашего вопроса, это своего рода непонятно, но я думаю, вы могли бы использовать вложенные атрибуты или шаблон прокси для утверждения «банковской модели», которая принадлежит запросу на обслуживание.

Также есть библиотека доступна для того же в рельсах, так что мне не нужно изобретать велосипед? Спасибо

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...