![](/img/trans.png)
[英]How can I get the last updated date from one-to-many relationship table in index view on rails
[英]How do I get the last updated date in an array?
這段代碼只顯示數組model.request_reports
內部的值。
為了獲得最新的數據,我必須循環瀏覽並將當前的report.updated_at
與最后保存的report.update_at value
。 要找出的一件事是update_at
字段是什么類,以及如何將它們彼此進行比較。 該類是ActiveSupport::TimeZone
我需要在循環時跟蹤具有最新的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.