Форматировать число до 2 десятичных знаков

В предыдущих версиях Rails перед валидацией будут значения типа cast , поэтому недопустимые значения будут передаваться как nil s в пользовательские валидаторы. Я делаю что-то вроде этого:

# app/validators/date_time_validator.rb
class DateTimeValidator < ActiveModel::EachValidator
  def validate_each(record, attribute, value)
    if record.public_send("#{attribute}_before_type_cast").present? && value.blank?
      record.errors.add(attribute, :invalid)
    end
  end
end
# app/models/something.rb
class Something < ActiveRecord::Base
  validates :sold_at, date_time: true
end
# spec/models/something_spec.rb (using factory_girl and RSpec)
describe Something do
  subject { build(:something) }

  it 'should validate that :sold_at is datetimey' do
    is_expected.not_to allow_value(0, '0', 'lorem').for(:sold_at).with_message(:invalid)
    is_expected.to allow_value(Time.current.iso8601).for(:sold_at)
  end
end

142
задан radbyx 11 July 2019 в 11:20
поделиться