假设我们有这样的东西:
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})
想法?
我们可以使用私有 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