Active Record:如何读取具有许多其他对象的db对象?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Active Record:如何读取具有许多其他对象的db对象?相关的知识,希望对你有一定的参考价值。

想象一下,我有一个具有许多附件的票证模型。在票模型我有:

has_many :attachment, dependent: :destroy, class_name: 'Ticket::Attachment'

现在我需要读取具有一个或多个附件的数据库故障单(故障单也可以没有附件)。我发现我可以“通过”所有门票并检查是否attachment.empty?但效率不高,因为一开始我读了db的所有门票。我想从db中读取那些在此活动记录查询中具有> 0附件的记录。怎么做?

答案

以下应该只给你有附件的门票:

Ticket.joins(:attachments).group("tickets.id")

它将在2个表之间执行内部联接,只返回两个表中存在的行,然后按Ticket.id对它们进行分组,以便获得唯一票证行。

以上是关于Active Record:如何读取具有许多其他对象的db对象?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Active Record 查找具有重复数据的记录

Rails Active Record 不允许保存

Rails中重写Active Record字段属性

具有完全迁移支持的 .net Active Record ORM

使用过滤器对 Active Record 对象进行分页的优化方法是啥?

如何更改 Rails 中 Active Record 的默认时区?