Tengo un modelo A que tiene una asociación "has_many" con 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 debo escribir una validación personalizada?Rieles: ¿Validar la presencia de la asociación?
Respuesta
Puede utilizar 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 con él si va a utilizar accepts_nested_attributes_for
con :allow_destroy => true
: Nested models and parent validation. En este tema puedes encontrar una solución.
Puede validar asociaciones con validates_existence_of
(que es un plug-in):
fragmento de ejemplo de this blog entry:
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
Como alternativa, puede utilizar validates_associated
. Como Faisal notes in the comments debajo de la respuesta, validates_associated
comprueba si el objeto asociado es válido ejecutando las validaciones de clase asociadas. Hace no verifica la presencia. También es importante tener en cuenta que una asociación nula se considera válida.
-------- ------------ Rails 4
simple validates
presence
trabajó para mí
class Profile < ActiveRecord::Base
belongs_to :user
validates :user, presence: true
end
class User < ActiveRecord::Base
has_one :profile
end
De esta manera, ahora se producirá un error Profile.create
. Tengo que usar user.create_profile
o asociar un usuario antes de guardar un profile
.
Si desea asegurarse de que la asociación es a la vez presente y garantiza que sea válida, también es necesario utilizar
class Transaction < ActiveRecord::Base
belongs_to :bank
validates_associated :bank
validates :bank, presence: true
end
- 1. Rieles: valida la presencia de parent_id en la asociación has_many
- 2. ¿Cuándo debería validar la presencia de un objeto de asociación ActiveRecord frente a su id?
- 3. ¿cómo validar la presencia de un campo solo si otro campo fue editado en rieles?
- 4. gmaps4rails valida antes de validar la presencia establecida en verdadero
- 5. Validar la presencia de un campo u otro (XOR)
- 6. Rieles: Validación de la existencia de una asociación
- 7. Validar singularidad de asociación en
- 8. Validar la unicidad de muchos a muchos asociación en Rails
- 9. Validar la exclusividad del ámbito en modelos de asociación polimórficos
- 10. rieles donde la condición de asociación de ONU-persistido
- 11. rieles HABTM y la búsqueda de registro con ninguna asociación
- 12. Rieles: extensiones: inverse_of y asociación
- 13. Rieles: crear en asociación has_one
- 14. Rieles: Reemplazando el método de asociación ActiveRecord
- 15. rieles 3 habtm eliminar solo asociación
- 16. rieles asociación has_one forma fields_for no exhiben
- 17. Rieles - Omita la validación de rieles para la subclase
- 18. Cómo detectar la presencia de cierto dispositivo
- 19. Rails has_one: a través de la asociación
- 20. (rieles) validar ayuda URL con expresiones regulares
- 21. Cómo detecta libgdx la presencia del teclado
- 22. Algoritmo para detectar la presencia de texto en la imagen
- 23. rieles Forma simple asociación de encargo de selección de campo
- 24. ¿Cómo se valida la presencia de un campo entre muchos
- 25. rieles/Rspec - escritura de especificaciones para el nombre de la clase de asociación belongs_to
- 26. Rieles: el uso de will_paginate con una asociación compleja encuentra
- 27. ¿Cómo ordenar por create_at columna de asociación en rieles?
- 28. Traducir Asociación de modelos de rieles - no funciona
- 29. La validación de los rieles requiere un valor numérico aunque la presencia no está establecida en verdadero
- 30. Cómo determinar si la Asociación de rieles está cargada de entusiasmo?
'has_many: bs' lulz – Archonic