Rails 5,PostgreSQL数据库上的ActiveRecord。有一个previous_id
列的类,如下所示:
class Event < ApplicationRecord
belongs_to :previous, class_name: 'Event'
end
我希望将没有其他事件的所有事件都引用为“之前”事件。如何进行查询才能执行此操作?
我显然可以这样做:
Event.where.not(id: Event.pluck(:previous_id))
但我的感觉是,有一种更高效的方法来实现这一目标。
建立@Craig Ringer的评论,用一些ruby代码生成他推荐的SQL,你可以做这样的事情
Event.joins("left join events referencing on referencing.previous_id = events.id")
.where("referencing.id is null")