Tin*_*n81 0 ruby activerecord ruby-on-rails-3
我想找到一个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
Run Code Online (Sandbox Code Playgroud)
问题似乎overdue是Invoice模型上的方法,而不是数据库列.
我怎么能检索那些记录呢?这甚至是有意义的还是将这些true和false值存储在数据库中会更好?
您应该为on 创建等效的类方法或范围:overdueInvoice
class Invoice < ActiveRecord::Base
def self.overdue
where('balance > 0').where('? > due_date', Date.today)
end
end
Run Code Online (Sandbox Code Playgroud)
然后你可以调用overdue发票关系:
class User < ActiveRecord::Base
def overdue_invoices
invoices.overdue
end
end
Run Code Online (Sandbox Code Playgroud)
请注意,我假设它due_date是一个数据库列,如果不是,则不能使用此方法 - 但是,您可以使用SQL替换它以从列中的数据计算到期日期.
| 归档时间: |
|
| 查看次数: |
90 次 |
| 最近记录: |