联系人已为其分配了用户:
class Contact < ActiveRecord::Base
...
belongs_to :user
...
end
用户模型有一个我希望在从db返回用户对象时排除的字段。使其工作的一种方法是添加默认范围:
class User < ActiveRecord::Base
...
has_many :contacts
...
default_scope select((column_names - ['encrypted_password']).map { |column_name| "`#{table_name}`.`#{column_name}`"})
end
如果我这样做在控制台:
User.first
select语句和结果集不包含'encrypted_password'。
但是,如果我这样做:
c = Contact.includes(:user).first
c.user
他们这样做。在这种情况下,不会应用User模型的默认范围,并显示'encrypted_password'字段。
所以我的问题是为什么?而且,是否有一种干净的方法来指定应在相关对象上返回哪些字段?
答案 0 :(得分:1)
您应该能够在belongs_to关系中使用:select选项。像这样:
class Contact < ActiveRecord::Base
...
belongs_to :user, :select => [:id, :first_name, :last_name, :email]
...
end