ruby on rails - formularios - Valores predeterminados de la base de datos de Rails y validación del modelo para campos booleanos
formularios en ruby on rails (3)
En un modelo de Rails tengo un atributo is_subscriber
, cuando construí una migración de db para agregar esta columna a la base de datos, especifiqué que el valor predeterminado fuera falso:
t.boolean "is_subscriber", :default => false
También especifiqué en el modelo que este atributo debe estar presente:
validates :is_subscriber, presence: true
Entonces, ¿por qué obtengo este error cuando creo una instancia de modelo sin especificar este atributo?
2012-05-08T21:05:54+00:00 app[web.1]: ActiveRecord::RecordInvalid (Validation failed: Is subscriber can''t be blank):
Creo que es mejor incluir esto en un validador personalizado.
en /app/validators/is_boolean_validator.rb
class IsBooleanValidator < ActiveModel::EachValidator
def validate_each(record, attribute, parameters)
if !parameters.in? [true,false]
record.errors[attribute] << ''This must be true or false.''
end
end
end
luego debe asegurarse de que esto esté cargado agregando lo siguiente a /config/application.rb
config.autoload_paths += %W["#{config.root}/app/validators/"]
(no olvide reiniciar su servidor para cargar esto)
A continuación, puede validar más claramente con
validates: :field1, field2, is_boolean: true
De here
Si desea validar la presencia de un campo booleano (donde los valores reales son verdaderos y falsos), querrá usar validates_inclusion_of: field_name,: in => [true, false] Esto se debe a la forma en que Object # blank está en blanco? maneja valores booleanos. falso.blanco? # => verdadero
O en Rails3 camino
validates :field, :inclusion => {:in => [true, false]}
He resuelto esto con:
validates_presence_of :is_subscriber, :if => ''is_subscriber.nil?''