在多个条件下有效地获取记录

Efficiently fetching records on multiple condition

使用 aasm statemachine 模型 Booking

状态机有以下状态

 state :payment_authorized
 state :payment_captured
 state :payment_failed
 state :some_more_states

所以要根据状态获取预订,我可以调用 booking.payment_authorized。但是我要寻找的是状态为 payment_authorizedpayment_captured 的所有记录。

这有效 booking.payment_authorized + booking.payment_captured 但这是在进行 2 次数据库调用。一个用于查找 authorized_state,另一个用于查找 captured_state。我怎样才能更有效地做到这一点(一次通话)?

谢谢

您可以使用 Booking.payment_authorized.or(Booking.payment_captured) 在单个查询中获取所有记录。

@Tom 给出了很好的解决方法。它利用 ActiveRelationOR 来实现两个关系的逻辑联合。请注意,该解决方案特定于 Rails 5.

您也可以通过以下方式完成:

Booking.where(aasm_state: [:payment_authorized, :payment_captured])
默认情况下,

aasm 使用 aasm_state 列来包含状态。它将进行 IN 查询。