2015-03-06 2 views
0

У меня есть поле ввода в форме, в которой пользователи вводят сумму в долларах. Я использую autoNumeric для маскирования этого поля, так что, когда пользователь вводит 1000, он отображает 1000.00 в текстовом поле.Sanitize dollar value до сохранения

В столбце в базе данных (requested_amount) является десятичной с точностью => 8 и шкалой => 2.

Я сделал обратный вызов, основанный на других SO ответов, который пытается лишить запятой из ряда перед проверкой и сохранением в базе данных.

def strip_commas_from_dollar_fields 
    self.requested_amount = self.requested_amount.to_s.gsub(',', '') 
end 

# Callback 
before_validation :strip_commas_from_dollar_fields 

Params хэш, который передается через то я отправить форму:

"requested_amount"=>"80,000.00" 

Однако, когда я осматриваю номер в консоли, он показывает:

=> 80.0 

Мне нужна в базе данных будет 80000.00.

ответ

0

Потому что:

def strip_commas_from_dollar_fields 
    p self.requested_amount // <- here is 80.0 already 

    self.requested_amount = self.requested_amount.to_s.gsub(',', '') 
end 

проверить это. Таким образом, вместо того, чтобы таким образом попытаться создать обертку вокруг requested_amount полей:

def requested_amount_wrapper=(val) 
    self.requested_amount = val.to_s.gsub(',', '') 
end 

def requested_amount_wrapper 
    self.requested_amount 
end 

и использовать это поле обертки в вашем хеше-параметрах:

"requested_amount_wrapper"=>"80,000.00" 
+0

К сожалению, вы можете объяснить, что вы имеете в виду, используя requested_amount_wrapper в моем параметры? Я изменил имя поля в форме на request_amount_wrapper, но получал ошибку unpermitted params. Затем я добавил обработчик запрашиваемой суммы к моему контроллеру и теперь получаю неизвестную ошибку атрибута на request_amount_wrapper. – Questifer

+0

Я имею в виду, что вам нужно использовать имя 'request_amount_wrapper' вместо' request_amount' в вашем представлении (в вашей форме). –

+0

OK Я сделал это. Я вижу сообщение msg в терминале: Неопроверенные параметры: request_amount_wrapper. Параметр hash показывает «request_amount_wrapper» => «120,000.00», но значение не сохраняется на request_amount. Я вижу ноль в консоли. – Questifer

Смежные вопросы