Tengo tablas en mi aplicación Rails que están vinculadas por un ActiveRecord::Relation así.
# Table name: lease_rents # id :bigint not null, primary key class LeaseRent < ApplicationRecord has_many :lease_tenant_payments, ... end class LeaseTenantPayment < ApplicationRecord belongs_to :lease_rent ... endcada LeaseRent puede tener 0 o múltiples LeaseTenantPayment .
en mi consola Rails estoy tratando de obtener solo el LeaseRent que tiene al menos uno o más LeaseTenantPayment .
para hacerlo, he podido obtener el número de LeaseTenantPayment vinculado a un LeaseRent específico
LeaseRent.all.where('id = 1').first.lease_tenant_payments.countQuiero obtener una matriz ActiveRecord::Relation que contenga cada LeaseRent que tenga al menos 1 o más LeaseTenantPayment . algo como esto:
#<ActiveRecord::Relation [#<LeaseRent id: ...>,<LeaseRent id: ...>,<LeaseRent id: ...>,...]>Alguien tiene alguna idea de como conseguirlo?
Use una unión, solo devolvería filas con lease_tenant_payments .
LeaseRent.joins(:lease_tenant_payments) Si desea usarlos en un bucle, es posible que deba usar también includes
LeaseRent.joins(:lease_tenant_payments).includes(:lease_tenant_payments)finalmente obtuve mis soluciones!
hay una forma serval de hacerlo.
solución 1:
LeaseRent.joins(:lease_tenant_payments).includes(:lease_tenant_payments)solución 2:
LeaseRent.joins(:lease_tenant_payments).distinctsolución 3 (mi favorita porque permite revertirla muy fácilmente simplemente eliminando el '.not'):
LeaseRent.includes(:lease_tenant_payments).where.not(lease_tenant_payments: { id: nil })estoy usando de esa manera:
scope "Aucun Paiement", :all, group: :unpayed do |rents| rents.includes(:lease_tenant_payments).where(lease_tenant_payments: { id: nil }) end scope "Reliquat", :all, group: :unpayed do |rents| rents.includes(:lease_tenant_payments).where.not(lease_tenant_payments: { id: nil }) end