如何在Ruby on Rails中检索相关记录?

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)

问题似乎overdueInvoice模型上的方法,而不是数据库列.

我怎么能检索那些记录呢?这甚至是有意义的还是将这些truefalse值存储在数据库中会更好?

And*_*all 5

您应该为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替换它以从列中的数据计算到期日期.