簡體   English   中英

如何獲取數組中的最后更新日期?

[英]How do I get the last updated date in an array?

這段代碼只顯示數組model.request_reports內部的值。

  1. 為了獲得最新的數據,我必須循環瀏覽並將當前的report.updated_at與最后保存的report.update_at value 要找出的一件事是update_at字段是什么類,以及如何將它們彼此進行比較。 該類是ActiveSupport::TimeZone

  2. 我需要在循環時跟蹤具有最新的updated_at的報表的數組索引,以便可以在循環后訪問它。

問題是,我不知道該怎么做:

msg = ""

reports_arr = model.request_reports

reports_arr.each do |report|

    updated_at = report.updated_at

    if updated_at 
        msg = msg + "#{updated_at} --- "
        msg = msg + "#{updated_at.class}---"

    end

end

msg

添加到@meagar評論。 您應該使用數據庫對表進行排序。

說了這么多,我們需要知道您使用的是哪個數據庫,因為每個命令的確切命令都不同。

帶Mongoid的Mongo是Model.order_by(:updated_at => 'desc').first

我的循環必須遍歷數組並按最大日期值進行檢查,因為在使用Im的系統中,它會通過字段“ due_at”自動對報告數組進行排序,該字段不是報告最近更新的記錄。 下面的代碼對我有用。

msg = ""

reports_arr = model.request_reports
last_modified_report = model.last_modified_report

recent = nil
recent_report = nil

reports_arr.each_with_index do |report,index|
updated_at = report.updated_at
if index == 0 
recent = updated_at
recent_report = report
end

if updated_at > recent
recent = updated_at
recent_report = report
end

last_modified_report = recent_report

end



msg = msg + "#{recent}---"
msg = msg + "#{recent_report}---"
msg = msg + "#{last_modified_report}"

model.last_modified_report = last_modified_report
model.save(validate: false)


msg

僅當您絕對無法在數據庫中直接查詢所需信息時,OP的答案才是好的。 我假設您只想要索引,以便可以找到最新的索引?

即使自動排序位於一列上,您對數據的查詢也可以使其在另一列上進行排序。

model.request_reports.order_by(:updated_at => 'desc').first

如果您的默認作用域使查詢混亂,則可以請求一個無作用域的列表,盡管我懷疑默認順序會造成任何麻煩。

model.unscoped.order_by(:updated_at => 'desc').first

您可以將已經編寫的查詢串在一起:即使request_reports是某個地方的查詢或范圍,這也很有用。

這將比獲得所有內容並循環遍歷便宜得多-如果可能的話,始終最好找到一種方法來獲取所需的數據庫查詢信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM