Я использую Rails 4 с DB Postgres и имею проблему, когда ведущие нули не сохраняются в моем столбце почтового индекса. Тип данных для этого столбца - строка. Когда я нахожусь в консоли rails, и я обновляю и почтовый индекс учетной записи от «7040» до «07040» с начальным нулем, мне говорят, что он сохраняется. Однако, когда я просматриваю объект, почтовый индекс по-прежнему «7040», а не «07040».Сохранять ведущие нули при сохранении строки в postgres/active record
Я видел этот вопрос на SO, но ответ предполагает перезапустить сервер (что я сделал без изменений в поведении) и упоминает, что проблема была в том случае, когда тип данных столбца использовался как целое. Мой тип данных всегда был строкой.
keep leading zeros when saving string in active record
Вы можете увидеть на изображении ниже снимок мне делать эту работу в рельсах консоли. Я получаю аккаунт. Я сохраняю zip с начальным нулем. Сохранение будет работать. Затем я просматриваю счет по его идентификатору и ищут zip, а конечный «0» не сохраняет:
Я обновил изображение консоли здесь с сохранением!
rails console example with save!
Также у меня есть эти валидации на модели:
проверяет: CONTACT_NAME,: company_name,: organization_id,: billing_address,: город,: состояние,: застежка-молния, присутствие: истинные
validates: account_number, уникальность: {scope:: organization_id}
Также, чтобы уточнить проблему, у меня есть два теста ниже. Очень странно TEST A терпит неудачу, пока проходит TEST B. Таким образом, это не вопрос сохранения 0 на фронте - так или иначе у меня возникла проблема с сохранением строки, которая была добавлена с «0». Почему это так? У меня есть много молний для обновления, так что я не могу вручную установить их все как TEST B - мне нужно найти способ, чтобы сохранить их в виде теста А.
it 'TEST A' do
@a= create(:account, zip: '299')
new_zip = @a.zip.prepend("0")
@a.zip = new_zip
@a.save!
@a.reload
@z = Account.find @a.id
expect(@z.zip).to eq('0299')
end
it 'TEST B' do
@a= create(:account, zip: '299')
@a.zip = "0299"
@a.save!
@a.reload
@z = Account.find @a.id
expect(@z.zip).to eq('0299')
end
сообщение кода, где вы читаете значение. –
Консоль не отображает 'SQL UPDATE', вызываемую' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' Попробуйте «save!», Чтобы увидеть, какие ошибки он вызывает. –
@WandMaker - спасибо за комментарий. Я только что обновил мое изображение консоли rails с призывом сохранить! Я вижу, что он говорит «Учетная запись существует» и нет обновления sql. Наверное, я в замешательстве - я не знаю, какая проверка ломается. Существует только одна учетная запись с этим номером учетной записи и организацией, чтобы она не нарушала мою проверку подлинности. Также я думал, что вызов .save вернет false, если проверка не прошла. –