ruby-on-rails – Rails 4 ActiveRecord包含(:model)而没有default_scope

我的Rails应用程序中有以下情况.用户和公司有两种型号:

class User < ActiveRecord::Base
  belongs_to :company
  default_scope -> {where(removed_at: nil)}
end

class Company < ActiveRecord::Base
  has_many :users
end

我现在想要的是加载公司记录并包括用户

Company.unscoped.all.includes(:users)

什么将导致对包含默认范围的users表的查询.
所以我得到公司记录,所有未被删除的用户都被预取.但在这种情况下,我也希望users_elove_at不为null(=>删除的用户记录). “unscoped”方法仅适用于Company模型,而不适用于User模型.

有没有办法做到这一点?谢谢你的任何想法!

最佳答案 这是我在Rails 4.0应用程序中使用的解决方案

class User < ActiveRecord::Base
  belongs_to :company
  default_scope -> {where(removed_at: nil)}
end

class UserUnscoped < User
  self.default_scopes = []
end

class Company < ActiveRecord::Base
  has_many :users, class_name: "UserUnscoped"
end

Company.unscoped.all.includes(:users)
点赞