/ / Rails: Validates_format_of per float non funzionante - ruby-on-rails, validation, floating-point, format

Rails: Validates_format_of per float non funzionante - ruby-on-rails, validation, floating-point, format

Sono nuovo a Ruby on Rails. Stavo cercando di convalidare il formato di uno degli attributi per inserire solo float.

validates :price, :format => { :with => /^[0-9]{1,5}((.[0-9]{1,5})?)$/, :message => "should be float" }

ma quando inserisco solo il carattere nel prezzo, lo accetta e mostra 0.0 valore per il prezzo. qualcuno può dire, cosa c'è di sbagliato in questo o perché questo accade?

risposte:

0 per risposta № 1

Un float è un numero e le espressioni regolari sono per le stringhe.

Sembra che quando si inserisce una stringa per il float, viene automaticamente convertito come 0.0 da Rails.

Hai un valore predefinito (0.0) sulla colonna? Se sì, allora puoi provare a rimuoverlo e usarlo validates_presence_of :price solo.


Qualcosa da provare: invece di mettere la stringa direttamente nel price colonna, metterlo in un price_string attr e usa a before_save callback per provare a convertire la stringa in prezzo. Qualcosa del genere:

attr_accessor :price_string

before_save :convert_price_string

protected
def convert_price_string
if price_string
begin
self.price = Kernel.Float(price_string)
rescue ArgumentError, TypeError
errors.add(ActiveRecord::Errors.default_error_messages[:not_a_number])
end
end

E nel tuo modulo, cambia il nome di text_field in :price_string.


9 per risposta № 2

Questa è la mia soluzione,

validates :price,presence:true, numericality: {only_float: true}

quando si inserisce ad esempio 7, il valore viene automaticamente trasferito a 7.0


3 per risposta № 3

Per le rotaie 3:

validates :price, :format => { :with => /^d+??(?:.d{0,2})?$/ },
:numericality =>{:greater_than => 0}