Rails从模型实例获取最新的子记录

时间:2012-08-11 18:01:16

标签: ruby-on-rails ruby-on-rails-3

合同has_many发票。创建合同后,模型会根据某些表格参数自动创建发票。

我希望能够从给定的合同中选择最近创建的发票。

这就是我想要实现的目标:

contract = Contract.new(params)
contract.save

invoice = contract.invoices.most_recent  # < wanting to get the most recent

#or possible even do this if it's quicker
invoice = contract.most_recent_invoice

哪种方法最精通,最好的方法是什么? Rails有内置方法吗?我只是想学习并保持最佳实践。

谢谢!

3 个答案:

答案 0 :(得分:1)

我会在Invoice模型中添加一个类方法,通过created_at对它们进行排序并返回第一个:

class Invoice < ActiveRecord::Base
  def self.most_recent
    order('created_at DESC').limit(1).first
  end
end

invoice = contract.invoices.most_recent # => Gives the last invoice created for this contract

答案 1 :(得分:1)

您可以尝试使用last方法。例如:

contract = Contract.new(params)
contract.save

invoice = contract.invoices.last

答案 2 :(得分:0)

通过created_at创建most_recent_invoice订单的范围并创建limit范围,这将限制记录的数量(为了最佳实践)