7

経費表があります。これには、invoice_id 列があります。

請求済みの費用用と請求されていない費用用の 2 つのスコープが必要です。私は、invoice_id が nil かどうかをテストするだけでよいと考えました。

scope :notbilled, where(:invoice_id == nil)
scope :billed, where(:invoice_id != nil)

しかし、それはうまくいきません。

何か案は?

ありがとう!

4

2 に答える 2

12

最初のものについては、ハッシュ構文を使用する必要があります。

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)
于 2012-05-18T22:49:14.263 に答える
4

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)

于 2014-08-13T05:17:24.770 に答える