如何通过链接关系号进行 qwery 过滤器 ActiveRecord::Relation
How to do a qwery witch filter ActiveRecord::Relation by linked relation number
我必须在我的 Rails 应用程序中创建表格,这些表格由 ActiveRecord::Relation 链接,就像这样。
# 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
...
end
每个 LeaseRent 可以有 0 个或多个 LeaseTenantPayment.
在我的 Rails 控制台中 我试图只获得 LeaseRent 至少有一个或更多 LeaseTenantPayment.
这样做我已经能够获得链接到特定 LeaseRent
的 LeaseTenantPayment 的数量
LeaseRent.all.where('id = 1').first.lease_tenant_payments.count
我想得到一个 ActiveRecord::Relation 数组,其中包含每个 LeaseRent 至少有 1 个或更多租户付款。像这样:
#<ActiveRecord::Relation [#<LeaseRent id: ...>,<LeaseRent id: ...>,<LeaseRent id: ...>,...]>
有没有人知道如何获得它?
使用连接,它只会 return 行 lease_tenant_payments
。
LeaseRent.joins(:lease_tenant_payments)
如果你想在循环中使用它们,你可能还需要使用 includes
LeaseRent.joins(:lease_tenant_payments).includes(:lease_tenant_payments)
终于找到我的解决方案了!
有多种方法可以做到。
解决方案 1:
LeaseRent.joins(:lease_tenant_payments).includes(:lease_tenant_payments)
解决方案 2:
LeaseRent.joins(:lease_tenant_payments).distinct
解决方案 3(我最喜欢的原因是它允许通过删除 '.not' 很容易地恢复它):
LeaseRent.includes(:lease_tenant_payments).where.not(lease_tenant_payments: { id: nil })
我正在使用这种方式:
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
我必须在我的 Rails 应用程序中创建表格,这些表格由 ActiveRecord::Relation 链接,就像这样。
# 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
...
end
每个 LeaseRent 可以有 0 个或多个 LeaseTenantPayment.
在我的 Rails 控制台中 我试图只获得 LeaseRent 至少有一个或更多 LeaseTenantPayment.
这样做我已经能够获得链接到特定 LeaseRent
的 LeaseTenantPayment 的数量LeaseRent.all.where('id = 1').first.lease_tenant_payments.count
我想得到一个 ActiveRecord::Relation 数组,其中包含每个 LeaseRent 至少有 1 个或更多租户付款。像这样:
#<ActiveRecord::Relation [#<LeaseRent id: ...>,<LeaseRent id: ...>,<LeaseRent id: ...>,...]>
有没有人知道如何获得它?
使用连接,它只会 return 行 lease_tenant_payments
。
LeaseRent.joins(:lease_tenant_payments)
如果你想在循环中使用它们,你可能还需要使用 includes
LeaseRent.joins(:lease_tenant_payments).includes(:lease_tenant_payments)
终于找到我的解决方案了!
有多种方法可以做到。
解决方案 1:
LeaseRent.joins(:lease_tenant_payments).includes(:lease_tenant_payments)
解决方案 2:
LeaseRent.joins(:lease_tenant_payments).distinct
解决方案 3(我最喜欢的原因是它允许通过删除 '.not' 很容易地恢复它):
LeaseRent.includes(:lease_tenant_payments).where.not(lease_tenant_payments: { id: nil })
我正在使用这种方式:
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