validator validations validates_presence_of validates validate rails method custom create ruby-on-rails ruby-on-rails-3 validation activerecord

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.