型号结构:-

User has_many :subscriptions
Blog  has_one :coupon
Subscription has_one :coupon


我包括桌子

User.includes(subscriptions: :coupon, :blogs)


我正在尝试获取所有用户数据,并且仅获取与其对应的有效订阅。

如果我做

User.includes(subscriptions: :coupon, :blogs).where(:state => 1).references(:subscriptions)


然后我让用户只有有效的订阅

那么如何使所有用户都拥有预加载的博客优惠券并包含在有效订阅中?

最佳答案

如果要加载所有用户,包括没有有效订阅的用户,但是对于每个用户只能访问有效订阅的用户,则需要定义另一个关联valid_subscriptions。可以通过以下方式完成:

user.rb

has_many :valid_subscriptions, -> { valid }, class_name: 'Subscription'

subscription.rb中,定义有效的含义。

scope :valid, -> { where(state: 1) }

然后您可以查询User.includes(:blogs, valid_subscriptions: :coupon)

10-06 12:57