Точка и запятая в поле "цена"

112 views
Skip to first unread message

Denis Surkov

unread,
Oct 5, 2006, 10:38:54 AM10/5/06
to ror...@googlegroups.com
Приветствую!

Имеется в БД в одной таблице поле "цена". Когда пользователь добавляет
новую запись в эту таблицу, надо, есессна, сделать проверку цены..
Причем цена может быть как и 15.00, так и 15,00 (т.е. либо точкой либо
запятой разделяться части цены). Как реализовать?..

стандартное price > 0.0 срабатывает только на цены типа 15.00, а на
15,00 вылетает с ошибкой..

--
С уважением, Den

Maxim Kulkin

unread,
Oct 5, 2006, 10:55:09 AM10/5/06
to ror...@googlegroups.com
А такое не подойдет ?
price.gsub!(',', '.')

Denis Surkov

unread,
Oct 5, 2006, 1:02:42 PM10/5/06
to ror...@googlegroups.com
> А такое не подойдет ?
> price.gsub!(',', '.')
Максим, спасибо! :) при проверке работает, но как мне.. гм.. поменять
эту запятую в точку в текущей записи?..

объясню подробнее. Добавляю новую запись, заполняю все поля, включая
поле "цена". Указываю вместо "5.0" - "5,0". Создал в моделе метод
before_create, в котором написал следующее:

price.gsub(',','.')

И никакой замены не происходит..

--
С уважением, Den
mailto:den.s...@gmail.com
icq# 301033169

Julian 'Julik' Tarkhanov

unread,
Oct 5, 2006, 1:10:01 PM10/5/06
to ror...@googlegroups.com

On 5-okt-2006, at 19:02, Denis Surkov wrote:

> Указываю вместо "5.0" - "5,0". Создал в моделе метод
> before_create, в котором написал следующее

Не с того конца подходишь. Сделай before_filter в контроллере,
который заменяет 7,5 на 7.5 у всех парамов. Не трогая записи.

Julian 'Julik' Tarkhanov

unread,
Oct 5, 2006, 1:13:24 PM10/5/06
to ror...@googlegroups.com

On 5-okt-2006, at 16:38, Denis Surkov wrote:

> Причем цена может быть как и 15.00, так и 15,00 (т.е. либо точкой либо
> запятой разделяться части цены)
Не может, в том то и дело. Если у тебя числовое поле в базе то оно
скорее всего с точкой, как положено
числам с плавающей точкой - а не строка. Как "хранить в базе деньги"
тоже вопрос известный.
Следовательно повторимся:
1) При выводе записей напиши хелпер, форматирующий твои "деньги" с
запятой
2) при получении чисел конвертируй все запятые в точки на входе в
префильтре (если в поле только числа и запятая конвертировать в точку)
3) аккуратно организовать хранение денег

Maxim Kulkin

unread,
Oct 6, 2006, 5:12:34 AM10/6/06
to ror...@googlegroups.com
On 5 October 2006 21:13, Julian 'Julik' Tarkhanov wrote:
> 2) при получении чисел конвертируй все запятые в точки на входе в
> префильтре (если в поле только числа и запятая конвертировать в точку)
По поводу пре-фильтров: там надо аккуратно конвертить только числовые поля и
не затрагивать, например, текстовые данные. Если забороть эту задачу просто у
тебя не получится, посмотри на param types плагин:
http://codefluency.com/2006/7/13/rails-views-preprocessing-parameters

Denis Surkov

unread,
Oct 6, 2006, 10:33:01 AM10/6/06
to ror...@googlegroups.com
> Не с того конца подходишь. Сделай before_filter в контроллере,
> который заменяет 7,5 на 7.5 у всех парамов. Не трогая записи.

Делаю так:

class CruisePrice < ActiveRecord::Base
...
before_filter :normalize_price
...
def normalize_price
self.price.gsub!(',','.')
end
end

Реакции никакой.. даже показывать текущую запись из таблицы "цены" не хочет..

--
С уважением, Den

Julian 'Julik' Tarkhanov

unread,
Oct 6, 2006, 11:09:50 AM10/6/06
to ror...@googlegroups.com

On 6-okt-2006, at 16:33, Denis Surkov wrote:

> Реакции никакой..

Потому что это не в контроллере. RTFM.
--
Julian 'Julik' Tarkhanov
please send all personal mail to
me at julik.nl


Reply all
Reply to author
Forward
0 new messages