Rails 的时间比较问题

发布于 2024-07-14 12:02:19 字数 467 浏览 3 评论 0原文

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

我也测试了这个单元,这些单元都通过了,但是当涉及到实现时,它似乎不起作用。

我的逻辑是否正确或者是否有更好的方法来实现这一目标?

I have a very simple task at hand. If the last time a record was updated has been longer than 15 minutes, display a button. Otherwise, don't display the button.

The field is a datetime.

My view code:

<% if @object.display_button? -%>
  my button
<% end -%>

My display button method on that object:

def display_button?
  return false if last_updated.nil?
  if Time.now - last_updated > 15.minutes
    true
  else
    false
  end
end

I also have this unit tested, which are passing, but when it comes to the implementation, it doesn't seem to work.

Is my logic correct or would there be a better way of accomplishing this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

断爱 2024-07-21 12:02:19
if last_updated < 15.minutes.ago

分钟方法返回一个整数,我相信,减去时间对象会产生另一个时间对象。 所以你的表达式将 int 与时间进行比较,并做了一些你不期望的事情。

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


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

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

这不是更容易阅读吗?

if last_updated < 15.minutes.ago

The minutes method returns an integer I believe, and subtracting time object yields another time object. So your expression compares an int to a time and does something that you dont expect.

15.minutes.ago yields a time object that can be directly compared to another time object.


Also, never ever do if (something) return true; else; return false in ruby. Your method will return the value of that last expression executed in it, so you can vastly simplify that entire method:

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

Isn't that easier to read?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文