一个联系人有一个分配给他们的用户:
class Contact < ActiveRecord::Base
...
belongs_to :user
...
end
用户模型有一个字段,我想在任何时候从数据库返回一个或多个用户对象时排除。使其工作的方法之一是添加默认范围:
class User < ActiveRecord::Base
...
has_many :contacts
...
default_scope select((column_names - ['encrypted_password']).map { |column_name| "`#{table_name}`.`#{column_name}`"})
end
所以在控制台中,如果我这样做:
User.first
选择语句和结果集不包括“encrypted_password”。
但是,如果我这样做:
c = Contact.includes(:user).first
c.user
他们是这样。在这种情况下,不会应用 User 模型的默认范围,并显示“encrypted_password”字段。
所以我的问题是为什么?此外,是否有一种干净的方法来指定应在相关对象上返回哪些字段?