Rails проверка нескольких объектов - PullRequest
0 голосов
/ 16 июня 2020

У меня есть таблица под названием meeting с этими полями {attr1, attr2, ..., start_time, end_time}

  • У меня есть форма для создания нескольких встреч, эта форма отправляет параметр в сервер, подобный этому
{
   attr1: ...
   attr2: ...
   ...
   schedules: [
      {start_time: ..., end_time: ...},
      {start_time: ..., end_time: ...},
      ...
   ]
}

, тогда на сервере будет создано N x meeting записей.

Прямо сейчас я создаю новый файл модели только для проверки и сохранения этих meeting записей, контроллер вернет это, если у него есть ошибки при проверке:

errors: {
    attr1: ["some errors msg"],
    attr2: ["some errors msg"],
    ...
    schedules: [
      {start_time: ["some errors msg"], end_time: ["some errors msg"]},
      {start_time: ["some errors msg"], end_time: ["some errors msg"]},
      ...
    ]
}
  • Затем у меня также есть форма для редактирования одного meeting, он отправит такой параметр на сервер
{
    id:..
    attr1: ...
    attr2: ...
    start_time: ...
    end_time: ...
}

, и я хочу, чтобы сервер возвращал это, если есть ошибка

errors: {
    attr1: ["some errors msg"]
    attr2: ["some errors msg"]
    start_time: ["some errors msg"]
    end_time: ["some errors msg"]
}

Теперь я хочу использовать тот же файл модели, который я только что создал, чтобы проверить это тоже . Как лучше всего это сделать? Прямо сейчас я просто проверяю

  • , если в param есть ключ schedules, затем проверяю attr1, attr2, а затем проверяю каждое значение schedules и ответ об ошибках сборки
  • если ключ schedules не включен в параметр, тогда проверьте attr1, attr2, start_time, end_time, .. затем создайте другой ответ об ошибках
with_options schedules_in_params? do
   validate :schedules
end

with_options schedules_not_in_params? do
   validate :start_time ..
   validate :end_time ..
   ...
end

таким образом мне нужно продублировать свой код для проверки start_time, end_time

как лучше это сделать?

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