具有“链表”类型自引用的模型,如何只获取那些未引用的?

问题描述 投票:0回答:1

Rails 5,PostgreSQL数据库上的ActiveRecord。有一个previous_id列的类,如下所示:

class Event < ApplicationRecord
  belongs_to :previous, class_name: 'Event'
end

我希望将没有其他事件的所有事件都引用为“之前”事件。如何进行查询才能执行此操作?

我显然可以这样做:

Event.where.not(id: Event.pluck(:previous_id))

但我的感觉是,有一种更高效的方法来实现这一目标。

ruby-on-rails postgresql activerecord
1个回答
0
投票

建立@Craig Ringer的评论,用一些ruby代码生成他推荐的SQL,你可以做这样的事情

Event.joins("left join events referencing on referencing.previous_id = events.id")
     .where("referencing.id is null")
© www.soinside.com 2019 - 2024. All rights reserved.