在我们的系统中,用户可以拥有多个订单,但只有一个订单在某个时间点处于活动状态。此有效订单有一个名为paid_premium_until
的字段。如果现在支付保费,他是保费,否则,订单到期,他是免费的。如果他没有订单,他也会自由。
我想选择免费用户,但我无法做到这一点。这是代码:
@users_table = BTR::User.arel_table
@users = users_table.select_manager
@users.join(orders_table).on(users_table[:id].eq(orders_table[:user_id]))
.where(orders_table[:paid_premium_until].lt(Time.now).or(orders_table[:intermediate_premium_until].lt(Time.now)))
.union(:all, BTR::User.joins(:orders).where('btr_order.user_id IS NULL'))
我也试过这个:
users_without_orders = BTR::User.arel_table
free_users = users_without_orders.join(orders_table).on(users_table[:id].eq(orders_table[:user_id]))
.where(orders_table[:user_id].eq(nil))
和.union(:all, free_users)
但是我得到了与上面相同的错误:
undefined method where' for #<Arel::Nodes::UnionAll:0x007f8c0a4e1e50> (NoMethodError)
。