Rails 5 пытается сохранить пустую строку как ноль - PullRequest
0 голосов
/ 23 июня 2019

Я в процессе обновления моего Rails-приложения с версии 4.1.16 до 5.2.3

У меня есть столбец с ненулевым ограничением и значением по умолчанию, равным 0

schema.rb:

t.integer wait_time_minutes  default: 0, null: false

Соответствующая форма содержит следующее:

 = f.select :wait_time_minutes, [15, 30, 45, 60, 90, 120], { include_blank: true }, class: 'form-control'

При отправке этой формы без выбора каких-либо значений в параметрах передается следующее:

"wait_time_minutes"=>""

И он пытается обновить столбец с нулем:

UPDATE "table_name" SET "wait_time_minutes" = $1, "updated_at" = $2 WHERE "table_name"."id" = $3  ["wait_time_minutes", nil], ["updated_at", "2019-06-23 05:32:28.368640"], ["id", 1445]]

Поскольку столбец не имеет нулевого ограничения, он вызывает следующее исключение:

PG::NotNullViolation - ERROR:  null value in column "wait_time_minutes" violates not-null constraint

Но это было не так, как раньше. Он отлично работал в Rails 4.1.16.

Как я могу исправить эту проблему? У меня есть эта проблема в большинстве мест моего приложения. Спасибо.

1 Ответ

0 голосов
/ 23 июня 2019

Одним из решений было бы использование before_save

# model.rb
before_save do
  self.wait_time_minutes ||= 0
end

Если вы не знакомы с ||=, это распространенный прием Ruby для создания экземпляра переменной, если она еще не установлена.

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