我正在尝试找到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
模型上的方法,而不是数据库列。
我怎样才能检索这些记录?这甚至是有意义的还是将这些true
和false
值存储在数据库中会更好?
答案 0 :(得分:5)
您应该在overdue
上为Invoice
创建一个等效的类方法或scope:
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,以便根据数据计算到期日期列。