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

时间:2017-10-24 18:57:18

标签: ruby-on-rails ruby postgresql activerecord aasm

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。如何更有效地完成这项工作(一次通话)?

谢谢

2 个答案:

答案 0 :(得分:2)

您可以使用[[3, 3, 5], [-6, 5, 3], [9, 2, 0]] 获取单个查询中的所有记录。

答案 1 :(得分:2)

@Tom为这个问题提供了一个很好的解决方案。它利用ActiveRelation' s OR来实现两个关系的逻辑联合。请注意,该解决方案特定于Rails 5。

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

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

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