ruby-on-rails - Rails EXCEPT 查询(过滤出联合表中存在的记录)

标签 ruby-on-rails ruby postgresql activerecord associations

我正在尝试列出与尚未创建的另一个模型没有关联的模型实例。

以下是我的模型之间的关联方式:

票.rb:

has_one :purchase
has_one :user, through: :purchase

用户.rb:

has_many :purchases
has_many :tickets, through: :purchases

采购.rb:

belongs_to :ticket
belongs_to :user

我有一个 SQL 查询,但在将其转换为 Rails 时遇到了问题:

SELECT id FROM tickets
EXCEPT
SELECT ticket_id FROM purchases;

它非常有效,因为它会返回所有尚未购买的门票的 ID。

我已经试过了:

Ticket.joins('LEFT JOIN ON tickets.id = purchases.ticket_id').where(purchases: {ticket_id: nil})

但这似乎不是正确的方向。

最佳答案

如果您只是想获取没有相关购买的 Ticket 记录列表,请改用 .includes。根据我的经验,join 会因没有关联记录而失败,这将使您无需编写任何实际的 SQL。

Ticket.includes(:purchase).where(purchases: { ticket_id: nil} )

生成的 SQL 查询对于人类来说有点难以阅读,但我已经使用了几次并且没有发现任何真正的性能差异。

关于ruby-on-rails - Rails EXCEPT 查询(过滤出联合表中存在的记录),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57148764/

相关文章:

mysql - 将持久对象委托(delegate)给 Redis,使用 MySQL 回退

ruby - !0 在 rails 中是错误的。为什么?

ruby-on-rails - 单表继承 (STI) 父 ActiveRecord .subclasses .descendants 返回空

ruby - 创建 Compass 项目时出现的问题(EACCES on line ["891"])

Ruby,如何控制调用实例化对象的返回值

ruby - 在 postgres Rails-4 中查询 Json 数据类型

Python Bookshelf 应用程序在使用 postgresql 云 SQL DB 部署到 GCP 时出错

ruby-on-rails - Rails/PostgreSQL - 如何验证只能有两个用户 ID 的一种组合?

ruby-on-rails - 未定义的方法 `with_indifferent_access' 为

sql - Rails Postgres : set all fields in a table to zero, 除了