首页 > 解决方案 > Rails 5:查询前面没有另一条记录(event_type)的记录(event_type)

问题描述

我的设置如下所示:

model Order
 + has_many events

model Event
 + belongs_to :order
 - type (basic attribute; no relation)

我有一些事件类型可以有效地“撤消”其他事件。像:completeuncomplete。我想形成一个询问以下内容的查询:

“只看completeuncomplete事件类型,是最近的事件类型complete吗?”

我想出了这个:

order.events.where(type: [:complete, :uncomplete]).order(created_at: :desc).first.complete?

但我不确定是否有更有效的方法来做到这一点。

另一个(奖励)挑战

还有另一个模型持有多个订单:

model RelatedOrder
 + has_many :orders

我也想做与上面相同的查询,但通过评估组中的每个订单complete是否。

我可以使用includesand 包括Orderand Event,但是我猜我应该在每个上定义一个范围Order?我确信有比以下更好的方法:

# model/related_orders.rb
def all_completed?
  related_order.completed_orders.count == related_orders.orders.count
end

我正在使用 Postgres 9.5.20。

标签: ruby-on-railsactiverecordruby-on-rails-5

解决方案


推荐阅读