联盟与arel不工作

时间:2017-06-09 07:46:52

标签: ruby-on-rails ruby-on-rails-4 arel

在我们的系统中,用户可以拥有多个订单,但只有一个订单在某个时间点处于活动状态。此有效订单有一个名为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)

0 个答案:

没有答案