Rieles 4:
Supongamos que tenemos dos modelos Película y Actor. El actor tiene muchas películas y la película pertenece al actor. En la mayoría de los casos, los desarrolladores utilizaron para validar que la clave externa actor_id esté presente o no. En este caso, no validará el modelo de actor para determinar si la identificación del actor ingresada existe o no. Es como la validación de atributos que siempre valida que los campos no deben estar vacíos al enviar el formulario.
Validación con clave foránea:
clase Película <ApplicationRecord pertenece_a: actor valida: actor_id, presencia: verdadero fin
clase Actor < ApplicationRecord has_many :películas, dependiente: :destruir fin
El escenario anterior valida la presencia de identificación del actor o no como el validador de presencia de atributo normal.
Ej: Actor.create(título: “abc”). => {id: 1, título: 'abc'} m = Movie.new(título: “ok ok”, actor_id: 111) => m.valid? => verdadero => Actor.find(111) ActiveRecord::RecordNotFound: No se pudo encontrar el actor con 'id'=111
Aún podemos guardar el registro de la película sin un actor válido.
Con asociaciones
clase Película <ApplicationRecord pertenece_a: actor valida: actor, presencia: verdadero fin
(o)
clase Película <ApplicationRecord pertenece_a: actor, requerido: verdadero fin
clase Actor < ApplicationRecord has_many :películas, dependiente: :destruir fin
Ej: Actor.create(título: “abc”). ==> {id: 1, título: 'abc'} m = Movie.new(título: “ok ok”, actor_id: 111) ==> m.valid? => false ==> m.errors.full_messages, ['El actor no puede estar en blanco']
En este caso siempre validará si el actor ingresado existe o no. En caso de un actor no válido, le arroja un error. Esta es la mejor práctica para realizar sus asociaciones. Siempre comprueba si el objeto asociado existe o no.
Rieles5
Desde Rails5 estas validaciones se agregaron por defecto. Valida que el objeto de asociación debe estar presente cuando define asociaciones pertenece_a.
Notas de lanzamiento
http://guides.rubyonrails.org/5_0_release_notes.html (belongs_to ahora activará un error de validación de forma predeterminada si la asociación no está presente).
Podemos desactivar esta función por completo desde la aplicación configurando la opción de configuración en el archivo inicializador.
config/inicializadores/new_framework_defaults.rb
Rails.application.config.active_record.belongs_to_required_by_default = falso
Este archivo inicializador está presente únicamente en la aplicación Rails5. Debe agregar este archivo inicializador manualmente cuando migre desde una versión anterior de su aplicación Rails y realice los cambios necesarios.
clase Publicación <ApplicationRecord has_many: comentarios, dependiente:: destruir fin
comentario de clase <Registro de aplicación pertenece_a: final de la publicación
c = Comment.create(título: “publicación increíble”) c.errors.full_messages.to_sentence => “La publicación debe existir”
No podemos crear ningún registro de comentario sin un registro asociado.
Podemos optar por este comportamiento predeterminado configurando
pertenece_a: publicación, opcional: verdadero
c = Comment.create(título: “publicación increíble”)
=>
RailsCarma ha estado ofreciendo Servicios de desarrollo de Ruby on Rails durante más de 8 años. Nuestros desarrolladores están bien versados en la ejecución de todo tipo de Desarrollo web Ruby on Rails proyectos y mejorando las características de sus aplicaciones Rails existentes. Contáctenos para saber más sobre nuestras habilidades de desarrollo y los proyectos en los que hemos trabajado.