ruby-on-rails - validations - rails validates if
Rieles: ¿Validar la presencia de la asociación? (4)
-------- Rails 4 ------------
Simple validates
presence
funcionó para mí
class Profile < ActiveRecord::Base
belongs_to :user
validates :user, presence: true
end
class User < ActiveRecord::Base
has_one :profile
end
De esta forma, Profile.create
ahora fallará. Tengo que usar user.create_profile
o asociar un usuario antes de guardar un profile
.
Tengo un modelo A que tiene una asociación "has_many" a otro modelo B. Tengo un requisito empresarial de que una inserción en A requiera al menos 1 registro asociado a B. ¿Hay algún método al que pueda llamar para asegurarme de que esto sea cierto? o ¿necesito escribir una validación personalizada?
Puede validar asociaciones con validates_existence_of
(que es un complemento):
Ejemplo de fragmento de esta entrada de blog :
class Tagging < ActiveRecord::Base
belongs_to :tag
belongs_to :taggable, :polymorphic => true
validates_existence_of :tag, :taggable
belongs_to :user
validates_existence_of :user, :allow_nil => true
end
Alternativamente, puede usar validates_associated
. Como Faisal observa en los comentarios debajo de la respuesta, validates_associated
checks_associated si el objeto asociado es válido al ejecutar las validaciones de clase asociadas. No verifica la presencia. También es importante tener en cuenta que una asociación nula se considera válida.
Si desea asegurarse de que la asociación está presente y se garantiza su validez, también debe usar
class Transaction < ActiveRecord::Base
belongs_to :bank
validates_associated :bank
validates :bank, presence: true
end
Puede usar validates_presence_of
http://apidock.com/rails/ActiveModel/Validations/ClassMethods/validates_presence_of
class A < ActiveRecord::Base
has_many :bs
validates_presence_of :bs
end
o simplemente validates
http://apidock.com/rails/ActiveModel/Validations/ClassMethods/validates
class A < ActiveRecord::Base
has_many :bs
validates :bs, :presence => true
end
Pero hay un error si utiliza accepts_nested_attributes_for
con :allow_destroy => true
: modelos anidados y validación principal . En este tema puedes encontrar una solución.