Как в общем виде обработать javascriptовский null в ruby глобально?

Есть большое приложение на рельсах. Есть много контроллеров, моделей, много яваскрипт кода. Вдруг откуда не возьмись взялась проблема. Хочу решить элегантно не прибегая к рефакторингу многих мест в приложении.
Есть яваскрипт код который передает через форму в рельсовое приложение содержимое некоторой переменной. Ее значение может в ряде случаев быть: null. Допустим я не предпринимаю мер и шлю на сервер пост запрос прямо с этим null.
Это значение натыкается на рельсовый валидатор:
validates :district,
numericality:
{only_integer: true, greater_than_or_equal_to: -1, allow_nil: true}

И вуаля - имеем ошибку. Ошибки бы не было если бы я в браузере заменил null на nil. Или же в контроллере проманипулировал входными параметрами и сделал эту замену. Либо как то заменил валидатор. В общем случае представляется что нужно пробежать по всему коду и наделать кучу изменений. Вы сталкивались с этой проблемой как решить одним махом, ну или с минимальными усилиями?

PS
Возможно смастерить собственный валидатор типа:
allow_null
чтобы тот пропускал значения nil и строковый "null"? Если это сделать просто, то как добиться того чтобы в базу записывался NULL, а не 'null', тем более если поле в базе не строковое.
  • Вопрос задан
  • 36 просмотров
Пригласить эксперта
Ответы на вопрос 1
2ord
@2ord
По-хорошему, нужно проводить валидацию данных на стороне клиента и не позволять отправление неверных данных.
По-быстрому можно добавить дополнительную валидацию, вставив её перед validates :district
validate :check_district_js_null
validates :district,
  numericality: {only_integer: true, greater_than_or_equal_to: -1, allow_nil: true}
def check_district_js_null
  self.district = nil if self.district == 'null'
end
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы