2012-04-04 25 views
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スコープから禁止されたインスタンスを削除しますが、 "last"のようなスコープ、またはモデルが一般的にクエリされたときに削除します。または、禁止された範囲または隠された範囲に該当するインスタンスが特に呼び出された場合、レコードが見つかりません。私はまだ個々のスコープ(例:​​またはUser.hidden)でこれらのインスタンスにアクセスできるようにしたいと思っていますが、私はむしろが最も一般的に使用されるクエリではなく余分な入力になります。

答えて

2

あなたが感謝いくつかのスコープ

default_scope joins(:status).where(:status => {:state => :active}) 
scope :hidden, unscoped.joins(:status).where(:status => {:state => :hidden}) 
+1

うわーを定義する必要があります!私は明日、妻がラップトップを壊し、Netflixを見るために私のマシンを命令したので、それを試さなければならないかもしれません。 –

+0

美しい、ありがとう! –

+0

クイックノートは、モデルを読み込み専用にしたので、 'where(:status_id => 1)'を使いました。私の人生を保存した 'default_scope'でした。ありがとう –

関連する問題