0

連絡先にはユーザーが割り当てられています。

class Contact < ActiveRecord::Base
    ...
    belongs_to :user
    ...
end

ユーザー モデルには、ユーザー オブジェクトまたはオブジェクトが db から返されるたびに除外したいフィールドがあります。これを機能させる方法の 1 つは、デフォルトのスコープを追加することです。

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

彼らはそうします。この場合、ユーザー モデルのデフォルト スコープは適用されず、「encrypted_pa​​ssword」フィールドが表示されます。

だから私の質問はなぜですか?また、関連するオブジェクトでどのフィールドを返す必要があるかを明確に指定する方法はありますか?

4

1 に答える 1

1

You should just be able to use the :select option on the belongs_to relationship. Something like this:

class Contact < ActiveRecord::Base
  ...
  belongs_to :user, :select => [:id, :first_name, :last_name, :email]
  ...
end
于 2012-07-06T03:54:43.673 に答える