primo luogo, vorrei dire che sono estremamente nuovo a Rails (giocato con esso una volta o due, ma mi costringe a scrivere un progetto completo con esso ora, ha iniziato su di esso ieri).convalida di un immobile modello è maggiore di un altro
Ora sto provando a convalidare che una proprietà del modello (terminologia?) È maggiore di un'altra. Questa sembrava essere un'istanza perfetta per validates_numericality_of
con l'opzione greater_than
, ma ahimè che genera un errore che mi dice greater_than expects a number, not a symbol
. Se provo a digitare quel simbolo .to_f
, ottengo un errore undefined method
.
Ecco cosa ho fatto alla fine e sono curioso di sapere se esiste un modo migliore. È solo un semplice sistema per controllare i rilasci del progetto, abbiamo solo versioni principali/secondarie (un punto), quindi float si è sentito come la decisione giusta qui.
class Project < ActiveRecord::Base
validates_numericality_of :current_release
validates_numericality_of :next_release
validate :next_release_is_greater
def next_release_is_greater
errors.add_to_base("Next release must be greater than current release") unless next_release.to_f > current_release.to_f
end
end
Questo funziona - passa il test di unità in questione (di seguito per il vostro piacere di osservazione), io sono solo curioso di vedere se c'è un modo più semplice - qualcosa che ho potuto provare il contrario.
unit test Rilevante:
# Fixture data:
# PALS:
# name: PALS
# description: This is the PALS project
# current_release: 1.0
# next_release: 2.0
# project_category: 1
# user: 1
def test_release_is_future
project = Project.first(:conditions => {:name => 'PALS'})
project.current_release = 10.0
assert !project.save
project.current_release = 1.0
assert project.save
end
risposta eccellente, risposta dettagliata - proprio quello che mi serviva (più un po 'di rassicurazione). –
Ottima risposta, correggi l'errore di ortografia quando hai la possibilità "greather_than". Grazie ancora. – ghayes
Fatto, grazie. –