我有一个带有Comment
模型的Rails应用程序和一个Notification
模型,其中每个评论has_many :notifications
我想在此dependent: :destroy
关系上设置has_many
。问题是通知表是巨大的(某处大约有2000万条记录)。因此,每当我尝试销毁评论时,都会花几分钟时间查看通知表。
通常当我查询通知表时,我只是为created_at
指定了一个范围,这看起来效果很好。
所有通知都是在评论created_at
的24小时内创建的 - 所以我想加快关系,我可以添加类似
has_many :notifications, -> { where(created_at: created_at..(created_at + 1.day)) }, dependent: :destroy
但当然这不起作用,因为在created_at
的实例上调用Notification::ActiveRecord_Relation
,而不是原始评论。
是否有人在该评论的has_many
查询中引用评论的属性?
答案 0 :(得分:2)
在关联定义中,您可以引用注释作为块参数传递:
has_many :notifications,
-> (comment) { where(created_at: comment.created_at..(comment.created_at + 1.day)) },
dependent: :destroy
有关详细信息,请参阅文档的 Accessing the owner object 部分。
答案 1 :(得分:1)
使用joins
引用where语句中的子类:
has_many :notifications, -> { joins(:notifications).where(notifications: { created_at: created_at..(created_at + 1.day) }, dependent: :destroy