私は を持ってCamping
いますAuthor
。アンAuthor
にはたくさんありCampings
ます。
「最後の 5 回のキャンプ」として定義される「トップ 5」を取得するには、次のようにします。
@author.campings.order(:created_at).limit(5)
しかし、「トップ 5」がキャンプ モデルに移行されるのであれば、このコンセプトが望ましいと思います。結局のところ、何がCamping
何であるかを知っているのは彼だけtop
です。
何かのようなもの
@author.campings.top
しかし、これを定義する方法はCamping
? @author.campings
ではなくCamping
、ActiveRecord::Relation
です。したがって、models/camping.rbの次のようなものは機能しません。
# Scope for "top" campings
def top(amount)
self.order("created_at").limit(amount)
end
使用されます
@author.top(5)
今のところ、@author
上記の例では、関係を介してこの「トップ」のものだけが必要です。今のところ、「トップ」の定義は単純に「過去 5 回のキャンプ」ですが、次のイテレーションでは、ビューの量、評価、またはその他のパラメータとフィールドに基づいて、より複雑になりますCamping
。Camping
これは、「トップ」を定義する正しい場所であると私に信じさせますAuthor
。
これを に追加することもできますAuthor
が、私の限られた知識では、分離パターンに違反しているように感じます。作成者は突然、キャンプのフィールドについて知る必要があります。
# Last 5 campings for this author
def top_campings(amount)
campings.order("created_at").limit(amount)
end
使用されます
@author.top_campings(5)
そのような関係は通常どのように解決されますか?