2012-02-10 3 views
0

В моем проекте rails у меня есть форма для ввода суммы в долларах. Эта сумма хранится как целое число в базе данных mysql.Номера, разделенные запятыми в рельсах 3.0.5 проект

<%=f.label :Amount%><br/> 
<%=f.text_field :amount%> 

если пользователь вводит номер, используя «.». разделитель вроде 2034.34 работает хорошо. Моя проблема в том, что кто-то использует «,» как в 2034 году. Этот номер хранится как 2 в базах данных. Как получить приложение для хранения числа с разделителями запятой и десятичной запятой?

Update

НКМ поставить на правильном пути, но я тоже получил стек глубокую ошибку. Я закончил с использованием

def amount=(amt) 

    write_attribute(:amount,amt.gsub(",", "")) 
end 
+1

Ознакомились вы http://guides.rubyonrails.org/i18n.html? –

ответ

1

Поскольку столбец базы данных decimal/float, мы должны обработать данные в нужном формате перед сохранением.

Вы можете пойти с activerecordbefore_save обратного вызова или переопределить метод установки этого атрибута следующим образом,

#model.rb 
def amount=(amt) 
    self.amount = amt.gsub(",", "") 
end 
+0

переопределить сеттер, как это происходит в бесконечном цикле и может сбой на уровне стека слишком глубоко – carbonr

1

Вы просите сохранить сумму в виде форматированной строки в базе данных. Я думаю, что это очень плохая идея: с этой строкой будет сложно выполнить вычисления (суммы, сравнение и т. Д.). Вместо этого используйте столбец float.

Вы можете использовать callback (Я надеюсь, что они доступны в 3.0.5) на вашей модели ActiveRecord, чтобы удалить запятую перед сохранением. Например

before_save :format_amount 

def format_amount 
    self.amount.delete! ',' 
end 

Использование NumberHelper для отображения назад запятой в вашем представлении.

1

Вы можете добавить before_savecallback в свою Модель, чтобы конвертировать запятые в точку.

before_save { self.amount.gsub!(/\,/, "." } 

IRB пример:

"2,034".gsub!(/\,/, ".") 
# => "2.034"