我的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)