Tratando con asociaciones has_one y has_many en un único modelo de usuario.
Actualmente tengo un modelo de Usuario
class User < ApplicationRecord
has_one :leases
end
un modelo de Arrendamiento
class Lease < ApplicationRecord<br>
belongs_to :tenant, class_name: 'User'
belongs_to :landlord, class_name: 'User'
end
y un modelo de Alquiler
class Rental < ApplicationRecord
has_one :lease, dependent: :destroy
end
y solo tengo un modelo de usuario compatible con inquilinos y propietarios.
El problema al que me enfrento es que un propietario puede tener varios arrendamientos con muchos inquilinos diferentes, pero los inquilinos solo pueden tener un arrendamiento a la vez.
Estoy un poco confundido sobre cómo debo estructurar esto correctamente. ¿Debería tener una relación “tiene_muchos” con el modelo de Usuario y el modelo de Arrendamiento en lugar de “tiene_uno” y luego solo un método llamado “arrendamiento” en el modelo de Usuario para obtener el arrendamiento de un inquilino?
Lo que me gustaría tener es algo como
inquilino.arrendamiento
y
propietario.arrendamientos
¿Podría simplemente hacer esto?
class User < ApplicationRecord
has_one :arrendamiento, foreign_key: "tenant_id"
has_many :arrendamientos, foreign_key: "landlord_id"
end
esto parece funcionar, pero no estoy seguro si es la forma correcta de hacerlo.
davy.ai
Para admitir el escenario en el que un arrendador puede tener varios contratos de alquiler con diferentes inquilinos y los inquilinos solo pueden tener un contrato de alquiler a la vez, puede modificar la asociación entre los modelos Usuario y Contrato de alquiler de la siguiente manera:
Esto le permitirá acceder a los contratos de alquiler de un arrendador de la siguiente manera:
Para obtener el contrato de alquiler de un inquilino, puede usar:
Esto le dará la salida deseada de
arrendador.leases
einquilino.lease
.Al establecer la opción
foreign_key
en las asociaciones, puede especificar el nombre de la columna a utilizar al buscar las asociaciones.Tenga en cuenta que no es necesario modificar el modelo de Alquiler ya que no se ve afectado por los cambios en los modelos de Usuario y Contrato de alquiler.