Разделенные запятыми числа в проекте rails 3.0.5 - PullRequest
0 голосов
/ 10 февраля 2012

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

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

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

Обновление

Нкм.Я закончил с использованием

def amount=(amt)

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

Ответы [ 3 ]

1 голос
/ 10 февраля 2012

Вы можете добавить before_save callback в вашей модели для преобразования запятых в точку.

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

irb пример:

"2,034".gsub!(/\,/, ".")
# => "2.034"
1 голос
/ 10 февраля 2012

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

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

#model.rb
def amount=(amt)
  self.amount = amt.gsub(",", "")
end
1 голос
/ 10 февраля 2012

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

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

before_save :format_amount

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

Используйте NumberHelper , чтобы отобразить запятую в вашем представлении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...