Rails 3 и сохранение десятичных значений из формы - PullRequest
9 голосов
/ 15 мая 2011

У меня странная ошибка в одном из моих приложений.

Когда я использую базу данных sqlite3, ошибки нет. Однако, когда я использую mysql2 в качестве адаптера базы данных, я сталкиваюсь с ошибкой сохранения десятичных значений из формы.

Если я передам значение 19,99, мой ввод после удаления десятичной дроби будет сохранен в базе данных как 19,00

Что бы это вызвало? База данных имеет правильные настройки для столбца, и я могу создать правильную запись с помощью консоли rails.

Редактировать: Сказал целое число, когда я действительно хотел сказать десятичный.

1 Ответ

14 голосов
/ 15 мая 2011

Я думаю, что это может быть одна из следующих возможностей:

  1. Проверка в вашей модели Rails (или какой-то шаг в вашем контроллере) устанавливает значение в целое число или, по крайней мере, обрезает десятичные дроби перед сохранением в базе данных. Чтобы проверить, так ли это, проверьте вашу INSERT операцию в ваших журналах и посмотрите, что данные Rails пытаются вставить.

  2. Если Rails отправляет 19.99 вместо 19.00, скорее всего, у вас небольшое расхождение между типами данных в ваших двух базах данных. Проверьте, не хранится ли в вашей базе данных MySQL десятичная цифра со шкалой 2 или выше . MySQL по умолчанию хранит типы данных с точностью 10 и шкалой 0, тем самым НЕ сохраняя десятичные дроби.

Если проблема № 2, решение состоит в том, чтобы сгенерировать миграцию и «изменить» тип поля для указания масштаба, например:

# 'up' portion of a new migration
def self.up
  change_column :mymodel, :myfield, :decimal, :precision => 6, :scale => 2
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...