Dentro de una clase modelo podemos configurar validaciones. Las validaciones nos permiten restringir los tipos de datos que pueden ser guardados en un modelo. Las validaciones se usan generalmente para la colección store
, pero también pueden ser usadas en otros lugares.
Por el momento, contamos con las siguiente validaciones (mas validaciones muy pronto):
Mira aquí para mayor información sobre los validators.
class Info < Volt::Model
validate :name, length: 5
validate :state, presence: true
end
Cuando usamos el método save!
en un buffer este llama a las validaciones, lo siguiente puede ocurrir:
save!
será rechazada con el objeto error.Puedes crear una validación propia pasando un bloque al método validate
validate do
if _name.present?
{}
else
{ name: ['must be present'] }
end
end
El bloque debe retornar un hash con los errores. Cada llave del hash debe estar relacionado con un array de mensajes error para ese campo. Puedes retornar multiples errores y estos serán agregados.
Puedes verte en la necesidad de usar un validator ya existente solo en ciertas situaciones. Por ejemplo, puedes tener la publicación de un blog con una fecha de publicación publish_date
la cual debe ser seteada, pero solo en el caso de que se haya publicado el post. Puedes usar cualquier validator dentro del bloque del método validations
(en plural).
class Post < Volt::Model
field :title, String
field :published, Boolean
field :publish_date
validate :title, length: 5
validations do
if published
validate :publish_date, presence: true
end
end
end
También puedes especificar que la validación solo se realize cuando se crea o se actualiza:
class Post < Volt::Model
field :published, Boolean
field :publish_date
validations(:update) do
if _published
validate :publish_date, presence: true
end
end
end
Por último, validations
puede pasar :create o :update basado en el estado.
class Post < Volt::Model
...
validations do |action|
if action == :update && _published
validate :publish_date, presence: true
end
end
end