0

私はuser'の延滞を見つけようとしていますinvoices

class User < ActiveRecord::Base
  def overdue_invoices
    invoices.where("overdue = ?", true)
  end
end

class Invoice < ActiveRecord::Base
  def overdue
    balance > 0 && Date.today > due_date
  end
end

問題は、データベースの列ではなく、モデルoverdueのメソッドであるようです。Invoice

とにかくそれらのレコードを取得するにはどうすればよいですか?そして、それは理にかなっているのでしょうか、それともそれらtruefalse値をデータベースに保存する方が良いのでしょうか?

4

1 に答える 1

5

on :と同等のクラスメソッドまたはスコープを作成する必要があります。overdueInvoice

class Invoice < ActiveRecord::Base
  def self.overdue
    where('balance > 0').where('? > due_date', Date.today)
  end
end

overdue次に、請求書関係を呼び出すことができます。

class User < ActiveRecord::Base
  def overdue_invoices
    invoices.overdue
  end
end

データベース列であると想定していることに注意してくださいdue_date。そうでない場合、このメソッドを使用することはできません。ただし、SQLに置き換えて、列にあるデータから期日を計算できる場合があります。

于 2013-02-17T15:16:26.003 に答える