経費表があります。これには、invoice_id 列があります。
請求済みの費用用と請求されていない費用用の 2 つのスコープが必要です。私は、invoice_id が nil かどうかをテストするだけでよいと考えました。
scope :notbilled, where(:invoice_id == nil)
scope :billed, where(:invoice_id != nil)
しかし、それはうまくいきません。
何か案は?
ありがとう!
経費表があります。これには、invoice_id 列があります。
請求済みの費用用と請求されていない費用用の 2 つのスコープが必要です。私は、invoice_id が nil かどうかをテストするだけでよいと考えました。
scope :notbilled, where(:invoice_id == nil)
scope :billed, where(:invoice_id != nil)
しかし、それはうまくいきません。
何か案は?
ありがとう!
最初のものについては、ハッシュ構文を使用する必要があります。
scope :notbilled, where(:invoice_id => nil)
2 つ目は、生の SQL を使用する必要があります。
scope :billed, where('invoice_id is not null')
生のSQLを書くことを避けるために、2つ目のaelにジャンプすることもできますが、これは高度なトピックであり、生のSQLよりも読みにくくなります。
これらの式はすぐに評価され、変数が含まれていないため同等のブール値に変換されるため、直接等価を使用しても機能しません。したがって、次のように解釈されます。
scope :notbilled, where(false)
scope :billed, where(true)
Rails 4の時点で回答を更新しました:
scope :notbilled, where(invoice_id: nil)
scope :billed, where.not(invoice_id: nil)
これは ActiveRecord 4 で追加された新機能です。
ドキュメント: http://edgeguides.rubyonrails.org/active_record_querying.html (「NOT 条件」を検索、現在はセクション 2.4)