をスコープを組み合わせることで、私はこの3つのスコープ考えてみましょう:Railsの4 - DRY的に
scope :assembly_reclamation, -> { where(status: 5) }
scope :customer_reclamation, -> { where(status: 9) }
scope :wrong_delivery, -> { where(status: 12) }
は、今の私は、これらの3つのカテゴリーに参加する範囲を作りたいとしましょう。私はこれを今のようにしています:
scope :returnable, -> { where(status: [5, 9, 12]) }
これは機能しますが、いくつかの欠点があります。 3つのカテゴリのうちの1つの条件を変更する場合は、それらをすべて含む範囲も再作成する必要があります。
scope :returnable, -> { assembly_reclamation.or.customer_reclamation.or.wrong_delivery }
しかし、これは有効なコードではありません。このような
何かがよりDRYようです。
このような方法でコードを作成する方法はありますか?
UPDATE
私はカテゴリとIDを使用した例を使用している知っているが、それについて、それをしないでください。それは、スコープをマージすることに関するものです。
UPDATE 2 誰もがid
の問題に集中していたので、私は、status
にid
から属性の名前を変更している、とあなたが本当にあるならば、それは質問
http://stackoverflow.com/questions/6686920/activerecord-query-unionあなたは – Ilya
ハードコーディングデータベースはIDを生成することができますあなたのアプリケーションコードに組み込むことは悪い考えです。主に、すべてのレコードを同じ順序でデータベースに挿入する必要があるため、テストには適していないためです。 – max
また、スコープは単なるクラスメソッドであることに注意してください。あなたが書いているものがラムダブロックに収まらない場合は、それを通常のクラスメソッドにリファクタリングする必要があります。 – max