我正在尝试找到一种方法来获取最旧的created_at值以获取类中最旧的对象,所以我以后可以操作它。
我正在尝试将所有项添加到数组中,然后获取最旧的值,然后使用.where活动记录方法将其转换回来以获取在该日期创建的对象。
这是我到目前为止所做的:
date_array=[]
buy_requests.each do |buy_request|
date_array << buy_request.created_at
end
date_array.min
但我觉得有更简单的方法可以做到这一点。
关于我遇到的问题是,当我将数据添加到数组时,我不再有时间创建它,因此我不能再使用.where一旦我使用.min获得最早的日期。< / p>
谢谢。如果我不够清楚,请告诉我。
答案 0 :(得分:4)
没有必要获得最早的时间戳,然后是相应的对象,只需:
id
...将受益于created_at上的索引,或者可能......
BuyRequests.order(:created_at).limit(1)
...如果您的身份证明是以先到先得的顺序可靠分配的。
您可能希望在相同的created_at时间戳上打破平局:
BuyRequests.first
答案 1 :(得分:2)
min_by
方法完全符合您的要求:
buy_requests.min_by(&:created_at)
但是,除非你需要加载请求,否则让数据库进行排序通常会更有效率(假设这是一个活动的记录模型),通过做类似的事情
ByRequest.order('created_at asc').first
答案 2 :(得分:0)
您可以非常轻松地使用Ruby的sort_by
方法。
objects.sort_by {|obj| obj.attribute}
所以你的例子就是:
buy_requests.sort_by { |req| req.created_at }
答案 3 :(得分:0)
为什么不在模型上使用#first
mehod,如果您关心的是最早的created_at
对象。我假设id
是按顺序生成的。即1, 2, 3, 4
buy_requests.first
将为您提供最旧的BuyRequest实例。我假设对象BuyReuest是一个ActiveRecord对象