У меня есть форма ввода Rails, по которой одно поле напрямую не связано с полем в базовом объекте: перед выполнением ввода его в поле ActiveRecord я должен выполнить некоторые вычисления. Пока все в порядке: я просто поместил расчет в контроллер.Проверка правильности рельсов по форме, а не записи
Моя проблема в том, что расчет может завершиться неудачно, и я хочу сообщить об этом пользователю. Я знаю, как сделать это с помощью флеш-оповещения, но это не связывает ошибку с конкретным полем ввода формы и не соответствует ошибкам, которые дает подтверждение проверки. То, что я хочу сделать, это указать форму, в которой поле ввода не удалось, и почему.
Вся документация, которую я могу найти, использует проверки ActiveRecord, но уже слишком поздно: я не могу создать ActiveRecord, потому что у меня нет данных, чтобы заполнить его (и даже если я заполню его недействительными фиктивными данными - yech! - Я потерял информацию о том, что вызвало ошибку, к тому времени, когда она попадает на проверку).
Так что же такое метод Rails для генерации ошибок проверки формы с контроллера (хорошо, хорошо, но я хочу, чтобы он работал, прежде чем я реорганизую его в проблему), а скорее из валидатора модели? Или что я должен делать вместо этого?
Редактировать: Вот пример такого мышления, который я пытаюсь сделать. Представьте себе менеджера флота, который занимается тысячами транспортных средств, обозначенных их регистрационными номерами (номерные знаки). Когда транспортное средство проверяется водителем, нет смысла предлагать раскрывающийся список с тысячами предметов, поэтому пользователь вводит регистрационный номер. Контроллер просматривает это (или, лучше, передает его модели, чтобы искать), он подбирается к записи транспортного средства, и идентификатор записи транспортного средства попадает в кассу. Если пользователь ошибочно подбирает номер, контроллер/модель (возможно) обнаруживает, что для этого автомобиля нет записи. Я знаю, что хочу сказать пользователю, почему сбой был неудачным, таким образом, который согласуется с другими ошибками проверки.
Вы можете использовать виртуальный атрибут. Добавьте его в форму и поместите свою валидацию на нее – Mandeep
@Mandeep имеет правильную идею. Эта логика не должна быть действительно в контроллере, а в самой модели. – engineersmnky