Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

212
Views
¿Hacer referencia al mismo modelo dos veces en Rails con una entidad simple?

Tengo la entidad Envío que hace referencia a la entidad Dirección dos veces, por ejemplo:

ingrese la descripción de la imagen aquí

y el modelo de envío es el siguiente perteneciente dos veces a la entidad de dirección (address_from, address_to):

 class Shipment < ApplicationRecord belongs_to :address_from, :class_name => 'Address' belongs_to :address_to, :class_name => 'Address' end

pero no tengo muy claro como se vería al otro lado del modelo de relación

 class Address < ApplicationRecord has_one :shipment end

Si fuera una relación entre envío y dirección sería la siguiente:

 rails g model Address rails g model Shipment address:references

pero no tengo muy claro como relacionarlos dos veces en este caso

Cualquier consejo sería muy apreciado, gracias.

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

En realidad, no puede usar una sola asociación aquí, ya que ActiveRecord no admite asociaciones en las que la clave externa podría estar en una de dos columnas. Cada has_one / has_many corresponde a una sola columna de clave externa en el lado inverso.

En su lugar, necesita una asociación en Dirección para cada clave externa en Envío:

 class Shipment < ApplicationRecord belongs_to :address_from, class_name: 'Address', inverse_of: :outgoing_shipments belongs_to :address_to, class_name: 'Address', inverse_of: :incoming_shipments end class Address < ApplicationRecord has_many :outgoing_shipments, class_name: 'Shipment', foreign_key: :address_from_id, inverse_of: :address_from has_many :incoming_shipments, class_name: 'Shipment', foreign_key: :address_to_id, inverse_of: :address_to end

Si bien podría usar has_one aquí, debe tener en cuenta que no hay nada que impida que una dirección tenga múltiples shipments.address_from_id a menos que agregue restricciones de exclusividad en shippings.address_from_id y shipments.address_to_id y validaciones. Sin embargo, no estoy seguro de por qué querrías esto.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!