ActiveRecord::Relation
クエリに変換されて実行される前の単純なクエリ オブジェクトでCollectionProxy
あるのに対して、もう少し洗練されたオブジェクトです。
まず、関連拡張を取得します。おそらく、このようなものを見たことがあるでしょう。多くの本を扱う書店モデルを想定します。
class Store < ActiveRecord::Base
has_many :books do
def used
where(is_used: true)
end
end
end
このようにして、次のような構文を使用して店舗で古本を呼び出すことができます
Store.first.books.used
しかし、これは最も基本的な使用方法です。コレクション プロキシで公開されている属性owner
を使用できます。reflection
target
オーナー
はowner
、関連付けを保持する親オブジェクトへの参照を提供します
反射
reflection
オブジェクトは のインスタンスでありActiveRecord::Reflection::AssocciationReflection
、関連付けのすべての構成オプションが含まれています。
目標
はtarget
関連コレクション オブジェクト (またはhas_one
との場合は単一オブジェクトbelongs_to
) です。
これらの方法を使用すると、関連付けの拡張でいくつかの条件を実行できます。たとえば、ブログがある場合、削除されたすべての投稿へのアクセス権を管理者であるユーザーに付与します (私が知っている下手な例)
Class Publisher < ActiveRecord::Base
has_many :posts do
def deleted
if owner.admin?
Post.where(deleted: true)
else
where(deleted: true)
end
end
end
end
reset
また、との2 つのメソッドにアクセスすることもできます。最初のメソッドreload
( reset
) はキャッシュされた関連オブジェクトをクリアし、2 番目のメソッド ( reload
) はより一般的でありreset
、関連オブジェクトをデータベースからロードするために使用されます。
CollectionProxy
これが、クラスを持つことがいかに役立つかを説明してくれることを願っています