2015-04-23 2 views
0

Как написать проверку в рельсах так, чтобы позволить ниже возможных значений ценыRails проверки валюты

100 или $ 100 или 100,00 или $ 100,00

Я заявленная цена поле как Float в моей модели

Мой текущий код выглядит следующим образом:

подтверждает: цена, цифровой ality: true

, который не позволяет сохранять значения как 100.

+2

Не хранить символы валюты в базе данных. Храните только номер. И украсьте рендеринг. –

+2

Для начала вам следует использовать ** Decimals ** http://stackoverflow.com/questions/1019939/ruby-on-rails-best-method-of-handling-currency-money –

+2

Я ожидаю, что он сохранит 100 но не 100 долларов. Если вы хотите, чтобы пользователь мог включить $, вам придется выполнить некоторую обработку ввода пользователя до проверки. Вероятно, вам лучше показать символ валюты в вашем пользовательском интерфейсе и не позволить пользователю вводить его вообще. – Shadwell

ответ

3

Вы можете добавить опцию format к вашему методу validates.

validates :price, numericality: true, 
      :format => { :with => /^\d{1,6}(\.\d{0,2})?$/ 

Это позволит значения до $ 999999,99 с дополнительным десятичного знака (если десятичное присутствует, не более 2 цифры не должны следовать.)

Но, как и другие уже упоминалось - это не самый лучший возможность сохранить эти значения в базе данных.

Я могу порекомендовать вам RubyMoney gem для работы с валютами.

+1

Regex, который включает необязательные ведущие $ и необязательные разделители запятой: '^ \ $? [0-9] {1,3} (?:,? [0-9] {3}) * (?: \. [0- 9] {2})? $ ' –

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