Преобразование пользовательских строк в числа

#ruby-on-rails #ruby #parsing #numbers

#ruby-on-rails #ruby #синтаксический анализ #числа

Вопрос:

Я знаю, что это очень простой вопрос, но у меня возникли проблемы с поиском стандартного / наилучшего способа сделать это в приложении rails. Это кажется довольно типичной проблемой, я уверен, что есть элегантный способ решить эту проблему.

Вот в чем проблема. У меня есть клиентская модель с десятичным столбцом «estimated_worth»:

 client = Client.new
client.estimated_worth = "2,000"
client.estimated_worth
=> 2
  

Очевидно, что это нехорошо. Я тоже иногда это вижу:

 client = Client.new
client.estimated_worth = "2 thousand"
client.estimated_worth
=> 2
  

Есть ли хороший способ справиться с этим в rails, который мне не хватает? В принципе, я ищу что-то похожее на Time.parse(), но для чисел.

Заранее спасибо.

Ответ №1:

Я не знаю каких-либо определенных методов Rails для этого, но лично я бы проверил ввод в клиентской форме с помощью JavaScript — достаточно простого регулярного выражения:

  ^d $
  

или вы могли бы использовать что-то вроде http://docs.jquery.com/Plugins/Validation если вы предпочитаете — а затем выполните некоторую проверку в модели для подтверждения.

Комментарии:

1. Да, я могу это сделать, просто кажется таким неудобным для пользователя. Я должен представить, что существует элегантное решение для обработки пользовательских чисел. Это кажется гораздо более рубиновым.

2. О да, вероятно, есть более рубиновый способ сделать это, но, учитывая, что вы проверяете ввод пользователя, логичным местом для этого, на мой взгляд, была бы сама форма. Что, если, например, пользователь ввел 2.000, ожидая, что это будет принято за две тысячи. Как бы вы обработали это как целое число по сравнению с числом с плавающей точкой? Что, если кто-то ввел 2000.50? Вы можете обойти все это, просто отфильтровав нечисловой текст до того, как он попадет в ваше приложение.. Я не уверен, что вы подразумеваете под неудобным для пользователя?

3. Нет, я думаю, что ваше предложение хорошее и, вероятно, то, что я в конечном итоге сделаю. Мне просто нравится делать процесс как можно более плавным. Нет ничего более раздражающего, чем заполнение формы, а затем необходимость исправлять технически правильное значение. Пример: когда веб-сайт хочет получить мой номер телефона в определенном формате. Я хочу попытаться избежать этого, если это возможно.