我手边有一项非常简单的任务。如果上次更新记录的时间超过15分钟,则显示一个按钮。否则,请勿显示按钮。
该字段是日期时间。
我的观看代码:
<% if @object.display_button? -%>
my button
<% end -%>
该对象上的显示按钮方法:
def display_button?
return false if last_updated.nil?
if Time.now - last_updated > 15.minutes
true
else
false
end
end
我也测试了这个单元,但是在实现时,它似乎没有用。
我的逻辑是正确的还是有更好的方法来实现这个目标?
答案 0 :(得分:7)
if last_updated < 15.minutes.ago
minute方法返回一个我认为的整数,并减去时间对象产生另一个时间对象。所以你的表达式将int与时间进行比较,并做一些你不期望的事情。
15.minutes.ago
产生一个时间对象,可以直接与另一个时间对象进行比较。
此外,永远不要在红宝石中if (something) return true; else; return false
。您的方法将返回在其中执行的最后一个表达式的值,因此您可以大大简化整个方法:
def display_button?
last_updated && last_updated < 15.minutes.ago
end
这不是更容易阅读吗?