我有一个具有以下属性的动物模型。
name: string
sex: string
acquired_at: datetime
fed_at: datetime
groomed_at: datetime
played_with: datetime
slept_at: datetime
sold_at: datetime
我希望显示具有最新日期时间的列,但仅适用于fed,groomed,sleep和play列,这些列将随着最近的时间不断变化。有没有办法获得像Animal.last
这样的对象,并获得4列中最新日期时间的列?
现在我只有一个if语句来检查4列相互之间,但它似乎很长且没必要。
答案 0 :(得分:1)
Animal.all.sort_by{|a| [a.fed_at, a.groomed_at, a.slept_at, a.played_with].max}.last
答案 1 :(得分:1)
如果您不需要知道哪一列是最早的,即四列中最近的时间值,您只需使用max
从转换为attributes
的记录中选择它即可散列:
Animal.last.attributes.values_at("fed_at", "groomed_at", "slept_at", "played_with").max
# => Thu, 07 Apr 2016 00:18:04 CEST +02:00
如果您需要从四列和列名中获取最新值,可以使用max_by
从attributes
哈希中选择最新的键值对:
Animal.last.attributes.
slice("fed_at", "groomed_at", "slept_at", "played_with").
max_by{ |k,v| v }
# => e.g. [ "groomed_at", Thu, 07 Apr 2016 00:18:04 CEST +02:00 ]
这将返回一个数组,其中第一项是属性名称,第二项是其值,这是最新时间。