ruby-on-rails - 查找关联记录仅具有特定属性值的所有记录
问题描述
假设我有两个模型Product
和Payment
一个has_many
关联。
class Product < ApplicationRecord
has_many :payments
end
class Payment < ApplicationRecord
belongs_to :product
end
Payment
model 有一个属性paid
,它可以是true
或false
。我怎样才能找到所有products
只有属性设置为payments
的?paid
false
我试过了:
Product.joins(:payments).where(payments: { paid: false }).distinct
但是当我需要所有这些时,它会返回products
至少一个在哪里。payment
false
false
解决方案
我是Ransack gem的忠实粉丝,它简化了很多查询ActiveRecord
您正在寻找仅支付 false 的产品,因此您可以在 ransack 查询中添加两个子句以实现您想要的结果。
首先安装ransack,然后用它来看看你是否得到你想要的结果
Product.ransack(
payments_paid_eq: false,
payments_paid_not_eq: true)
.result
.distinct
在某些方面,这是一个稍微令人困惑的查询,但实质上您是说返回所有付款为假的产品,而不是返回付款为真的产品。
不使用 ransack gem 的另一种方法如下
Product.joins(:payments)
.where(payments: {paid: false})
.where.not(payments: {paid: true})
.distinct
推荐阅读
- python-3.x - 导入名称中有空格的文件
- javascript - 创建用于在打字稿中获取文本的 cypress 自定义命令
- javascript - 在页面加载期间加载任意资源并显示加载指示器
- powershell - 如何在软件列表代码的输出中显示计算机名称
- r - R:在用户定义的 Fn 中,我可以合并延迟命令,可能带有用户输入吗?
- c# - 在 Xamarin.Android 中重新加载 XML 布局以改变方向?
- ios - 我们可以在 swift 的 UITableView 部分中实现部分吗?
- python - 如何在 Python 中过滤对象数组?
- ios - UIButton 系统按钮和图像未显示
- javascript - 加载 HTML 文件,编辑标签内的内容,并将更改保存到 HTML 文件