has_many关联状态检查执行N + 1个查询活动管理员

时间:2018-09-05 06:54:52

标签: ruby-on-rails activeadmin

模型结构:用户拥有许多订阅和博客,订阅具有has_many优惠券。 我已经包含has_many表,但是我需要为每个订阅执行状态检查   因此,如果我在作用域集合中执行where查询,则它将使所有用户仅具有有效订阅。那么如何避免N + 1查询并执行状态检查。

def scoped_collection
  end_of_association_chain.includes(:subscriptions, :blogs)
end
index do  
  column :email
  column "referrer" do |user|
    subscription = user.subscriptions.valid.first
    subscription.referrers.first.code if subscription
  end
  column "blog_id" do |user|
     user.blog.id if user.blog
  end

end

1 个答案:

答案 0 :(得分:0)

仅从查询中加载有效的订阅,请检查以下代码

 controller do
      def scoped_collection
        User.includes(subscriptions: :referrers).select("users.*, (SELECT referrers.code from referrers WHERE subscriptions.state = 1 LIMIT 1) as refer_code")
      end
  end