validations - Ruby on Rails: errors.add_to_base vs. errors.add
rails validates if (3)
En este ejemplo, puede ver la validación de campo (se debe elegir equipo). Y puede ver una validación de nivel de clase / base. Por ejemplo, requirió al menos un método de contacto, un teléfono o un correo electrónico:
class Registrant
include MongoMapper::Document
# Attributes ::::::::::::::::::::::::::::::::::::::::::::::::::::::
key :name, String, :required => true
key :email, String
key :phone, String
# Associations :::::::::::::::::::::::::::::::::::::::::::::::::::::
key :team_id, ObjectId
belongs_to :team
...
# Validations :::::::::::::::::::::::::::::::::::::::::::::::::::::
validate :validate_team_selection
validate :validate_contact_method
...
private
def validate_contact_method
# one or the other must be provided
if phone.empty? and email.empty?
errors.add_to_base("At least one form of contact must be entered: phone or email" )
end
end
def validate_team_selection
if registration_setup.require_team_at_signup
if team_id.nil?
errors.add(:team, "must be selected" )
end
end
end
end
He leído que errors.add_to_base se debe usar para los errores asociados con el objeto y no para un atributo específico. Tengo problemas para conceptualizar lo que esto significa. ¿Podría alguien proporcionar un ejemplo de cuándo me gustaría usar cada uno?
Por ejemplo, tengo un modelo de Banda y cada Banda tiene un Género. Cuando valido la presencia de un género, si el género falta, ¿debería agregarse el error a la base?
Cuantos más ejemplos, mejor
¡Gracias!
Un género faltante sería un error de campo. Un error de base sería algo así como un duplicado exacto de un registro existente, donde el problema no estaba vinculado a ningún campo específico, sino al registro como un todo (o al menos a una combinación de campos).
Vale la pena señalar (ya que esto aparece en los motores de búsqueda, que es cómo lo encontré) que esto está en desuso. La manera de hacerlo de Rails 3 es:
errors[:base] << "Error message"
o
errors.add(:base, "Error message")
http://apidock.com/rails/ActiveRecord/Errors/add_to_base
http://apidock.com/rails/v3.2.8/ActiveModel/Errors/add