1

我手头有一个非常简单的任务。如果上次更新记录的时间超过 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

我也对这个单元进行了测试,它正在通过,但是在实现方面,它似乎不起作用。

我的逻辑是正确的还是有更好的方法来实现这一点?

4

1 回答 1

7
if last_updated < 15.minutes.ago

分钟方法返回一个我相信的整数,减去时间对象会产生另一个时间对象。因此,您的表达式将 int 与时间进行比较,并执行您不期望的操作。

15.minutes.ago产生一个可以直接与另一个时间对象进行比较的时间对象。


另外,永远不要if (something) return true; else; return false用红宝石做。您的方法将返回在其中执行的最后一个表达式的值,因此您可以大大简化整个方法:

def display_button?
  last_updated && last_updated < 15.minutes.ago
end

这不是更容易阅读吗?

于 2009-02-24T17:01:44.373 回答