1

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. 我怎样才能更有效地做到这一点(一次通话)?

谢谢

4

2 回答 2

2

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

于 2017-10-24T19:06:30.253 回答
2

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

您也可以通过以下方式进行:

Booking.where(aasm_state: [:payment_authorized, :payment_captured])

aasm默认情况下,使用aasm_state列来包含状态。它将进行IN查询。

于 2017-10-24T19:21:33.680 回答