可以指定belongs_to或has_many关系对象返回哪些字段?

时间:2012-07-06 02:21:26

标签: ruby-on-rails activerecord

联系人已为其分配了用户:

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_pa​​ssword'。

但是,如果我这样做:

c = Contact.includes(:user).first

c.user
他们这样做。在这种情况下,不会应用User模型的默认范围,并显示'encrypted_pa​​ssword'字段。

所以我的问题是为什么?而且,是否有一种干净的方法来指定应在相关对象上返回哪些字段?

1 个答案:

答案 0 :(得分:1)

您应该能够在belongs_to关系中使用:select选项。像这样:

class Contact < ActiveRecord::Base
  ...
  belongs_to :user, :select => [:id, :first_name, :last_name, :email]
  ...
end