1

私はいくつかのモデルを持っていbelong_to :statusます。

ステータスは次のとおりです。

  • アクティブ
  • 隠れた
  • 禁止された

ステータスごとにスコープを設定し、ユーザーや他のいくつかのコンテンツモデルに適用しますがUser、例を見てみましょう。

習慣から、私は書くUser.find(15)User.all、またはUser.last(5)または@category.users

それを変える理由はないと思います。実際、私をわがままと呼んでください、しかし私はそれを変えたくありません。この種のタスクをより高いレベルで処理でき、何度も再入力する必要がないように感じます。

  • User.active.where(...)
  • User.active
  • User.active.last(5)
  • @category.users.active

それは型破りなようです。残念ながら、これらのモデルは多くのインスタンスで使用されているため、おそらくモデルレベルで、禁止または非表示のモデルを事前に選別する方法が必要です。たとえば、禁止されたインスタンスをallスコープから削除しますが、「最後」のようなスコープや、モデルが一般的に照会された場合も同様です。または、禁止または非表示のスコープに該当するインスタンスが具体的に呼び出された場合、レコードが見つかりませんでした。User.banned個々のスコープ(またはUser.hidden)を介してこれらのインスタンスにアクセスできるようにしたいのですが、最も一般的に使用されるクエリではなく、追加の入力を使用したいと思います。

4

1 に答える 1

2

いくつかのスコープを定義する必要があります

default_scope joins(:status).where(:status => {:state => :active})
scope :hidden, unscoped.joins(:status).where(:status => {:state => :hidden})
于 2012-04-04T04:04:27.727 に答える