Rails 6 числовое поле с запятой - PullRequest
0 голосов
/ 21 января 2020

Когда пользователь вводит числовое значение в поле, которое содержит запятую, например: 1 000 000. Когда форма отправляется и сохраняется, значение становится равным 1. Тип столбца: t.bigint

Как мне предотвратить это для всех моих числовых c полей?

Ответы [ 2 ]

2 голосов
/ 21 января 2020

Главное в разделителе тысяч состоит в том, что за ним всегда следуют три цифры. Так что заглядывание в regex будет иметь смысл. Также я бы сделал эту обработку в контроллере, а не в модели, так как это функция ввода из формы.

Так что, если бы у меня был объект Foo с атрибутом some_number, в foos контроллер я бы сделал что-то вроде:

def foo_params
  params.require(:foo).permit(:some_number).tap do |foo|
    foo[:some_number] = foo[:some_number]&.split(/[\.\,](?=\d{3})/).join
  end
end

, который преобразует «3000» и «3.000» в «3000», но оставляет «3.12» как «3.12».

Он также преобразует «23 345 555 444,3» в «23345555444,3»

1 голос
/ 21 января 2020

Я не знаю, является ли это лучшим способом сделать это, но я обычно использую пользовательский установщик, допустим, ваш столбец total, тогда я делаю что-то вроде:

def total=(value)
  value = value.gsub(/[\.,],'') if value.is_a?(String) # remove , and .
  write_attribute(:total, value)
end

Теперь Вы можете назначить что-нибудь вроде «1.000» или «2,343,111», и оно будет лишено запятой и точки.

Если вы хотите быть более терпимыми к значениям (по-французски вы можете написать «1 000»), вы можете используйте /\D/ для регулярного выражения, чтобы удалить все, что не является ди git.

...