在 Rails 中预加载范围和参数的关联

问题描述 投票:0回答:1

假设我们有这样的东西:

class Group < ActiveRecord::Base
  has_many :users
end

class User < ActiveRecord::Base
  scope :have_more_than_X_posts, -> (x) { where('posts_count > ?', x) }
end

我希望能够这样调用:

Group.includes(users: {have_more_than_X_posts: 10})

想法?

ruby-on-rails postgresql ruby-on-rails-4 activerecord rails-activerecord
1个回答
0
投票

我们可以使用私有 Rails API 来实现这一点,因此请谨慎使用它,因为它可能会发生重大变化。对于 Rails 7+,我们可以这样做:

@group = Group.all
ActiveRecord::Associations::Preloader.new(records: @group,
                                          associations: :users,
                                          scope: User.have_more_than_X_posts(10)).call

puts @group.users
© www.soinside.com 2019 - 2024. All rights reserved.