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

然后您可以调用overdueInvoice 关系:

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

请注意,我假设due_date它是一个数据库列,如果不是,则不能使用此方法 - 但是,您可以将其替换为 SQL 以根据列中的数据计算到期日期。

于 2013-02-17T15:16:26.003 回答