Primero, déjenme decir que soy extremadamente nuevo en Rails (jugué con eso una o dos veces pero me obligué a escribir un proyecto completo con él ahora, comencé ayer).Validar una propiedad de modelo es mayor que otra
Estoy tratando de validar que una propiedad de modelo (¿terminología?) Es mayor que otra. Esto parece ser una instancia perfecta para validates_numericality_of
con la opción greater_than
, pero lamentablemente eso arroja un error al decirme greater_than expects a number, not a symbol
. Si intento encasillar ese símbolo .to_f
obtengo un error de undefined method
.
Esto es lo que finalmente hice y tengo curiosidad sobre si hay una mejor manera. Es solo un sistema simple para controlar los lanzamientos de proyectos, solo tenemos lanzamientos mayores/menores (un punto) por lo que flotar se sintió como la decisión correcta aquí.
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
Esto funciona - pasa la prueba de la unidad correspondiente (a continuación para su placer de la vista), sólo soy curioso en cuanto a si hay una manera más fácil - algo que podría haber tratado de otra manera.
de los ensayos correspondientes unidad:
# 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
excelente respuesta, respuesta detallada - justo lo que necesitaba (además de un poco de tranquilidad). –
Gran respuesta, corrige el error de ortografía cuando tienes la oportunidad de "greather_than". Gracias de nuevo. – ghayes
Hecho, gracias. –